상세 컨텐츠

본문 제목

[Deep Learning-딥러닝]Cross Entropy 알고리즘 소스 구현 및 Tensoflow 구현

Artificial Intelligence

by [성운] 2019. 8. 15. 16:10

본문

이번 포스팅은 MLP 및 비용함수를 CrossEntropy를 이용하여 XOR 연산법을 구현하는 방법에 대해서 알아보겠습니다

소스 구성은 델타룰 알고리즘 및 Cross Entropy를  Python으로 구현한 소스와 두 번째는 Tensorflow를 이용한 구현 두 가지입니다. Cross Entropy에 대한 이론은 https://ynebula.tistory.com/28포스팅을 참고 바랍니다.

 

학습 내용 및 신경망 구성

XOR 연산을 Cross Entropy 비용함수와 델타룰 학습 알고리즘으로 구현합니다. 신경망 구성은 다음과 같습니다.

Network

직접 구현에서는 구현 편의상 편차는 0으로 가정하고 구현하였습니다.

Cross Entropy 알고리즘 구현

소스 구성은 “Sigmoid 함수”, “Cross Entropy 학습 알고리즘”, “가중치 초기화 및 학습 훈련”, “학습 테스트부분으로 구성되어 있습니다. 학습 방법은 SGD 방식으로 구현했습니다. 또한 행렬곱 연산과 행렬합 연산 방법을 이해해야 소스 원리를 알 수 있습니다.

1.     Sigmoid 구현

Source-1

Sigmoid 함수를 구현하기 위해 numpy 라이브러리를 import 합니다. 개인적으로 학습률은 너무 높지 않은 수로 설정하는 것이 좋다고 생각됩니다. 과거에 학습률을 0.9로 했을 때 결과가 잘 나오지 않았던 기억이 있습니다. N은 데이터가 4개로 되어 있으므로 4로 설정합니다.

2.     Cross Entropy 학습 알고리즘

Source-2

가중합과, 활성함수 결과를 저장할 행렬 변수를 선언하였습니다. 신경망 연산은 행렬 연산을 수행하므로 꼭 행렬로 선언하셔야 합니다. 필자는 처음에 배열로 선언해서 많은 시행착오를 가졌습니다. 학습 부분은 어렵지 않으므로 넘어가겠습니다.

  • 오차-출력층, 은닉층

출력층에 비용함수로 Cross Entropy를 사용했으므로 출력층 델타는 출력층 오차와 같습니다. 따라서 output_deltaoutput_err의 값을 저장합니다.

은닉층 오차를 구하기 위해 은닉층-출력층가중치를 전치하여 행렬곱을 수행해야 합니다. “은닉층-출력층가중치를 전치했으므로 12열에서 21열이 되었으며 output_delta와 행렬곱을 수행하여 hidden_err21열이 됩니다. 1행은 첫 번째 노드의 오차이고 2행은 두 번째 노드의 오차입니다.

  • 은닉층 델타

은닉층에 두 개의 노드가 있습니다. 따라서 각 노드의 델타를 구합니다. 활성함수를 Sigmoid를 사용했으므로 도함수와 오차 값을 곱하여 은닉층 델타를 구합니다.

  • 가중치 조정

 은닉층-출력층에서 output_delta11열이고 hidden_y21열로 되어있어 hidden_y를 전치시켜 행렬곱을 수행했으며, 결과가 12열이 되어 W2와 같은 형태로 만들었습니다.

3.     가중치 초기화 및 학습 훈련

Source-3

가중치 난수를 배열에 담아 행렬로 변화하여 W1, W2를 초기화하였습니다. 훈련은 1000번 수행했습니다.

4.     학습 테스트

Source-4

훈련을 1000만 수행했는데 Sum of squared와 비슷한 결과를 냈습니다. Cross Entropy가 같은 오차라도 Cross Entropy 함수가 훨씬 더 민감하게 반응한다는 이론을 확인할 수 있습니다.

Tensorflow를 이용한 구현

Source-5

다른 부분은 앞 포스팅과 같아설명하지 않겠습니다. 다른 부분은 비용을 계산하는 부분이 변경되었습니다.

Source

[Sum of squared]

https://github.com/ynebula/First-Contact-with-Books/blob/master/Deep_Learning/Backpropagation.ipynb

 

ynebula/First-Contact-with-Books

첫걸음 시리즈 예제 소스입니다. Contribute to ynebula/First-Contact-with-Books development by creating an account on GitHub.

github.com

[Cross entropy]

https://github.com/ynebula/First-Contact-with-Books/blob/master/Deep_Learning/BackpropagationCE.ipynb

 

ynebula/First-Contact-with-Books

첫걸음 시리즈 예제 소스입니다. Contribute to ynebula/First-Contact-with-Books development by creating an account on GitHub.

github.com

 

감사합니다.

 

[참고자료]

딥러닝 첫걸음

관련글 더보기

댓글 영역