DeepLearning / / 2022. 10. 26. 11:49

DeepLearning - Tensorflow 다층 퍼셉트론, 역전파

퍼셉트론의 한계 : 인간은 풀 수 있지만, 인공지능은 풀 수 없다 .

예를들어, 성냥개비로 4개의 정삼각형을 만들 수 있느냐 라는 문제에서 

 

2차원 평면이라는 틀을 깨고, 성냥개비를 피라미드 처럼 올려서 4개의 정삼각형을 만들 수 있다.

인공지능 학자들은 인공 신경망을 개발하기 위해서 반드시 XOR 문제를 극복해야만 했다. 이 문제 역시 고정관념을 깬 기발한 아이디어에서 해결점이 보였다.

 

XOR의 해결점은 평면을 휘어 주면서 고정관념를 깨는 것 이었다. 

 

텐서플로우를 활용하여 다층 퍼셉트론을 풀면, 

#xor 설정
xor = {'x1':[0,0,1,1],'x2':[0,1,0,1],'y':[0,1,1,0]}
#데이터프레임 생성 
XOR = pd.DataFrame(xor)
print(XOR)
#X,y 설정

X = XOR.drop('y', axis=1)
y = XOR.y

'''인공신경망 알고리즘 (여러개의 회귀식 사용)'''
tf_xor = Sequential()
tf_xor.add(Dense(2,input_dim=2, activation='sigmoid'))
tf_xor.add(Dense(1))
tf_xor.compile(loss='mse')
tf_xor.fit(X,y,epochs=1000000)
tf_xor.evaluate(X,y)
print(tf_xor.predict(X))
'''다층 퍼셉트론 텐서플로우 이용 출력 값

Epoch 50000/50000
1/1 [==============================] - 0s 1000us/step - loss: 3.1188e-06
1/1 [==============================] - 0s 0s/step - loss: 3.1168e-06
[[0.00131202]
 [1.001992  ]
 [1.0020149 ]
 [0.00164843]]

 

이런식으로 0 , 1, 1,0이 나오는 것을 확인할 수 있다. 

그치만 더 학습을 시켜서 최대한 값이 똑같도록 하고 싶었고 epochs 100만번으로 설정 하여 돌려봤다.

 

Epoch 1000000/1000000
1/1 [==============================] - 0s 0s/step - loss: 3.4316e-06
1/1 [==============================] - 0s 564us/step - loss: 3.4327e-06
[[-0.00160801]
 [ 0.9985702 ]
 [ 0.99822843]
 [-0.00244188]]

 

Back Propagation 역전파

 Gradient Descent를 이용하여 검은색(Foward Propagation ) 처럼 Cost값을 구하고,

W를 여러번 갱신하여 최적화한다. 

 

하지만, 'Forward Propagation'은 한번의 갱신을 위한 Cost를 구하는데 비효율적으로 많은 연산을 필요로 한다.

그래서 Back  Propagation을 이용하여 최적화의 순서를 바꿔 적은 연산으로 Cost를 구한다.

 

 Back Propagation은  Cost의 미분값이 필요하고,  이것이 위 이미지 좌측 상단의 '∂f / ∂w' 이고 이것을 구하는데 이용되는 것이 연쇄법칙이다. 

'Chain Rule' 즉 연쇄법칙(함성함수의 도함수)

 

*핵심은 우리가 하나의 Unit을 최적화하기 위해 Forward Propagation에선 엄청난 연산량이 필요했는데, 

Back Propagation에선 편미분값을 구해서 '한번의 곱셈'으로 간단하게 구할 수 있다. *

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유