Neural Representation Logic Gate

Natchapol Patamawisut
4 min readMar 26, 2020

--

ใน concept ของ Neural Network จะประกอบไปด้วย node หรือ unit ซึ่งในแต่ละ node ก็จะเป็นส่วนที่ทำหน้าที่ในการตัดสินใจผลลัพท์ ก่อนที่จะส่งต่อผลลัพท์ที่ได้ให้กับ node ใน Layer ถัดไป โดยในที่นี้ Neural ที่ทำงานเป็น Gate พื้นฐานจะเป็น Single Layer Perceptron

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

Sigmoid function

จะพบว่าในค่า x ที่มีค่าน้อยกว่า -5 หรือ มากกว่า 5 จะมึค่าประมาณ 0 และ 1 ตามลำดับ ทำให้เราสามารถใช้คุณสมบัตินี้ในการทำให้ output เป็น bit 0,1 ได้

เรามาลองดูวิธีการทำกันเลยดีกว่าครับ

โดยขั้นแรกก็สร้าง 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 จะมีค่าเป็น

AND gate ‘s weight

โดยที่ค่าจะไม่จำเป็นต้องเป็นตามภาพด้านบน แต่จะต้องมีสัดส่วนประมาณนี้ ให้ 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
AND gate’s Truth table

ในส่วน weight ของ OR gate จะมีค่าเป็น

OR gate ‘s weight

นำมาเขียนเป็น 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
OR gate’s Truth table

ในส่วนของ NOT gate จะมี weight เป็น

NOT gate ‘s 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
NOT gate’s Truth table

ในส่วนของ NAND gate จะมี weight เป็น

NAND gate ‘s 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
NAND gate’s Truth table

ในส่วนของ NOR gate จะมี weight เป็น

NOR gate ‘s 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
NOR gate’s Truth table

ในส่วนของ XNOR gate นั้นจะมี boolean function เป็น

XNOR

ซึ่งเราสามารถนำมาทำเป็น 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
XNOR gate’s Truth table

ในส่วนของ XOR gate นั้นจะมี boolean function เป็น

XOR

ซึ่งเราสามารถนำมาทำเป็น 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
XOR gate’s Truth table

--

--

Natchapol Patamawisut
Natchapol Patamawisut

Written by Natchapol Patamawisut

Studying Computer Engineering at King Mongkut's University of Technology Thonburi

No responses yet