D language로 Backpropagation algorithm 구현

토요일부터 어제까지 근근하게 개발했던 Backpropagation Algorithm을 올려본다

개발 언어는 D Language를 사용해서 개발했다.(D Language 연습용.)

사실 레포트 제출용으로 시작하게 되었다. 실제 레포트는 아무 툴을 사용해서 데이터와 실행 순서를 분석하라는것이였는데, 어째 하다보니 답답해서 구현해 봤다.

예전에 Decision Tree 구현할때처럼 일단 이런 러닝 알고리즘은 구현해보는게 가장 좋은 방법이다.
책을 쳐다보고만 있으면 이해하기 쉽지 않은 알고리즘중에 하나이다.
명확하게 이해하기 위해 코딩을 해보는게 좋다고 생각한다.

물론 D Language로 구현된 ANN프로그램이 있지만, 절대 돌려보지도 못하고 그냥 소스만 살짝 보고 덮었다. 컴파일 하기도 힘들었다. ㅜㅜ

내용상 Feed Forword와 Error Backpropagation 과정으로 구성되어 있고, 내부적으로 sigmoid 함수를 사용했고, tanh 함수도 역시 사용할 수 있도록 내부적으로 준비해 두었다.

1. Initialize Weight, Bias, Neural

  • 각 weight 값을 초기화 한다. 대체로 [-0.5 ~ 0.5 ] 사이 값으로 한다.
  • 각 Bias 값을 초기화 한다. [-1.0 ~ 1.0]

2. Feedforword

  • training set 입력 (Input 과 Target 값 입력)
  • Hidden Layer의 input과 output값을 계산한다. (sigmoid 함수와 각 노드weight과 값을 이용한다.)
  • Output Layer의 input과 output값을 계산한다.(역시 Hidden(이전) layer의 output값과 weight값을 이용해 계산)

3. Error Backpropagation

  • 이 부분은 LMS을 이용한 미분법이 들어가서 자세한 설명은 Machine Learning책이나 DAta Mining 책을 참고하길 바란다. (블로그에 정리해볼라구 했는데 수식이 너무 많고. 게다가 방문하는 분들에게 누가 될까봐…^^;)
  • 간단하게 개념만 설명하자면, Layer를 뒤로 훓으면서 현재 output에 가장 많은 영향을 끼친 weight를 미분법을 이용해 값을 결정해 weight를 갱신하는것이다.

4. ending condition에 의한 학습 종료

5. 학습한 weight과 Bais를 이용한 Test

대체적으로 이런 방식으로 돌아가고, 내부적으로 배열을 사용한 입,출력이 상당히 많다. (learning 프로그램들의 어쩔수 없는점)

XTvOiFAxaO.7z
‘*common.d’ 파일안에 테스트 데이터도 첨부되어 있다. 문자인식 테스트셋인데, 이것은 어디서 공개한 테스트 셋으로 직접 소스레벨로 넣어두어 테스트 할 수 있도록 해봤다.

유연하게 쓸수 있도록 좀더 손볼 예정이고, 앞으로 이것을 기반으로 내가 쓸수 있는 toolset으로 발전시켜 나가야 겠다.

CC BY-NC 4.0 D language로 Backpropagation algorithm 구현 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.