Neural Representation Logic Gate
ใน concept ของ Neural Network จะประกอบไปด้วย node หรือ unit ซึ่งในแต่ละ node ก็จะเป็นส่วนที่ทำหน้าที่ในการตัดสินใจผลลัพท์ ก่อนที่จะส่งต่อผลลัพท์ที่ได้ให้กับ node ใน Layer ถัดไป โดยในที่นี้ Neural ที่ทำงานเป็น Gate พื้นฐานจะเป็น Single Layer Perceptron
โดยเมื่อรวมกลุ่มของ Node ในแต่ละชั้นก็จะเรียกว่า Layer
ซึ่งโดยพื้นฐานจะมี Layer อยู่ 3 ชนิดคือ
Input Layer คือ Layer แรกที่เป็นจุดรับค่าเข้ามาภายใน Neural Network
Output Layer คือ Layer สุดท้ายที่เป็นตัวส่ง Output ออกจากระบบ
Hidden Layer คือ Layer อื่นๆระหว่าง Input Layer และ Output Layer
ซึ่งในกระบวนการส่งผ่านจากชั้นหนึ่งไปอีกชั้นหนึ่งจะมี weight คือ parameter ที่จะเป็นตัวที่บอกว่า input แต่ละสายมีความสำคัญขนาดไหน
และมี Activation function ที่เป็นตัวปรับ input x weight ที่เข้ามาให้อยู่ในรูปแบบที่เราต้องการ เช่น ในการทำ classification เราต้องการให้ผลลัพท์ที่ได้มีค่าระหว่าง 0–1
ดังนั้นเราจึงใช้ Activation functionn เป็น Sigmoid (Logistic) funcion
ซึ่งถ้าเราสังเกตใน Sigmoid function
จะพบว่าในค่า x ที่มีค่าน้อยกว่า -5 หรือ มากกว่า 5 จะมึค่าประมาณ 0 และ 1 ตามลำดับ ทำให้เราสามารถใช้คุณสมบัตินี้ในการทำให้ output เป็น bit 0,1 ได้
เรามาลองดูวิธีการทำกันเลยดีกว่าครับ
สามารถ Download Notebook ได้ ตาม link ด้านล่าง
โดยขั้นแรกก็สร้าง Input matrix ที่เป็นความเป็นไปได้ทั้งหมดในการแทนค่า กรณีที่มี 1 และ 2 input
สร้าง Activation function เป็น Sigmoid function และ function ที่ใช้สร้าง logic gate
def actFun(z): return 1/(1+np.exp(-z))def cGate(theta,x): X = np.ones([x.shape[0],x.shape[1]+1]) X[:,1:] = x return list(map(int,(actFun(np.dot(theta.T,X.T))>0.5)[0]))
เสร็จแล้วมาเริ่มกันที่ AND gate
Weight ในส่วนของ AND logic จะมีค่าเป็น
โดยที่ค่าจะไม่จำเป็นต้องเป็นตามภาพด้านบน แต่จะต้องมีสัดส่วนประมาณนี้ ให้ weight ล่างทุกตัวน้อยกว่าค่าลบของ weight แรกแต่ให้เมื่อรวมกันแล้วมากกว่าค่าลบของ weight ตัวแรก
นำมาเขียนเป็น perceptron ได้
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
AND_w = np.array([[-30], [20], [20]])def AND(x): return cGate(AND_w,x)
tAND = pd.DataFrame([x4[:,0],x4[:,1],AND(x4)]).TtAND.columns = ['x1','x2','F(x1,x2)']print('AND GATE')tAND
ในส่วน weight ของ OR gate จะมีค่าเป็น
นำมาเขียนเป็น perceptron ได้
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
OR_w = np.array([[-10], [20], [20]])def OR(x): return cGate(OR_w,x)tOR = pd.DataFrame([x4[:,0],x4[:,1],OR(x4)]).TtOR.columns = ['x1','x2','F(x1,x2)']print('OR GATE')tOR
ในส่วนของ NOT gate จะมี weight เป็น
นำมาเขียนเป็น perceptron ได้
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x2 เป็น Input ตาม Truth Table ด้านล่าง
NOT_w = np.array([[10], [-20]])def NOT(x): return cGate(NOT_w,x)tNOT = pd.DataFrame({'x':x2.T[0],'F(x)':NOT(x2)})print('NOT GATE')tNOT
ในส่วนของ NAND gate จะมี weight เป็น
นำมาเขียนเป็น perceptron ได้
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
NAND_w = np.array([[30], [-20], [-20]])def NAND(x): return cGate(NAND_w,x)tNAND = pd.DataFrame([x4[:,0],x4[:,1],NAND(x4)]).TtNAND.columns = ['x1','x2','F(x1,x2)']print('NAND GATE')tNAND
ในส่วนของ NOR gate จะมี weight เป็น
นำมาเขียนเป็น perceptron ได้
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
NOR_w = np.array([[10], [-20], [-20]])def NOR(x): return cGate(NOR_w,x)tNOR = pd.DataFrame([x4[:,0],x4[:,1],NOR(x4)]).TtNOR.columns = ['x1','x2','F(x1,x2)']print('NOR GATE')tNOR
ในส่วนของ XNOR gate นั้นจะมี boolean function เป็น
ซึ่งเราสามารถนำมาทำเป็น Neural ได้ดังนี้
โดยการใช้ AND gate, NOR gate และ OR gate ทำให้เราได้ XNOR gate ออกมา
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
def XNOR(x): a1 = AND(x) a2 = NOR(x) a = np.array([a1,a2]).T return OR(a)tXNOR = pd.DataFrame([x4[:,0],x4[:,1],XNOR(x4)]).TtXNOR.columns = ['x1','x2','F(x1,x2)']print('XNOR GATE')tXNOR
ในส่วนของ XOR gate นั้นจะมี boolean function เป็น
ซึ่งเราสามารถนำมาทำเป็น Neural ได้ดังนี้
โดยการใช้ AND gate, NOR gate ทำให้เราได้ XOR gate ออกมา หรือใช้ NOT gate กับ XNOR ก็จะได้ XOR gate เหมือนกัน
ซึ่งจะได้ผลลัพท์เมื่อเราใส่ x4 เป็น Input ตาม Truth Table ด้านล่าง
def XOR(x): xnor = np.array([XNOR(x4)]).T return NOT(xnor)tXOR = pd.DataFrame([x4[:,0],x4[:,1],XOR(x4)]).TtXOR.columns = ['x1','x2','F(x1,x2)']print('XOR GATE')tXOR