Machine Learning/인공신경망

파이썬으로 인공신경망(Neural Network) 구현하기(1)

Jay김 2020. 4. 21. 07:32

ANN(Artificial Neural Network)

많은 분들이 교과서에서 인공신경망에 대해서 많이 읽어보고 Keras 같은 프로그램으로 손쉽게 데이터를 집어넣고 직접 돌려보는 경험도 해봤을 것이라고 생각한다. 그러나 이에 만족하지 못하고 아예 처음부터 인공신경망을 완전히 짜서 프로그램이 수면 밑에서 어떻게 돌아가는지 '심층학습'을 하고자 하는 분들도 있을 것이라고 생각한다. 특히나 불안하게 별 이해 없이 자동으로 짜이는 코드를 돌리는 대신 직접 밑바닥부터 만들어 배우기 좋아하는 분들이 이런 부류에 속할 것이라고 생각한다.

일단 웹사이트들을 돌아봤지만 초보자에게 친절한 블로그는 없는 듯했다. 그냥 처음부터 Numpy나 클래스부터 꺼내 들고 코드 블록만 쭉 늘어놓은 경우가 대다수였다. 정말 미안하지만, 해당 블로그들은 필자에게도 굉장히 가독성이 떨어졌다. 해당 시리즈는 파이썬으로 인공신경망을 정말 바닥부터 코딩하여 여러분의 이해를 돕고자 한다. 독자들 중에 PyTorch를 다뤄본 경험이 있는 분들은 3편까지만 봐도 충분할 것이라고 생각한다.

제목을 보고 예상했을 테지만 당연히 몇 가지 준비물이 필요하다.

  • Python (패키지 관리가 용이한 Anaconda로 설치하는 것을 추천한다) 및 Python 기본지식
  • Numpy 패키지
  • 인공신경망과 행렬 계산에 대한 기본적인 이해.

두말 않고 바로 코딩에 들어가도록 하겠다. 다음 입력값 3개 인공신경망을 구현해보자. 주로 입력층의 한 부분에 해당할 것이다. 실생활에 비유한다면 해당 경우에는 일종의 RGB 비율에 따른 색깔 인식으로 생각할 수도 있겠다. 입력값과 가중치는 그저 보기 좋으라고 무작위로 넣은 것이니 크게 신경 쓰지 않아도 된다. 활성화 함수(activation function)는 아직 넣지 않을 것이다.

입력값 = [2.3, 5.6, 1.2]
가중치 = [3.1, 2.1, 8.7]
편향 = 2

출력값 = 입력값[0]*가중치[0] + 입력값[1]*가중치[1] + 입력값[2]*가중치[2] + 편향

print(출력값)

대략 감이 잡히는가? 이제 살짝 더 복잡한 다음 인공신경망을 구현해보자. 이젠 입력값이 4개이고 출력값이 3개다. 주로 출력층에서 볼 수 있는 구조일 것이다. 코드가 이해가지 않는다면 앞서 구현한 코드를 차근차근 보고 오도록 하자.

입력값 = [2.3, 5.6, 1.2, 2.4]
가중치1 = [3.1, -2.1, 8.7, -9.1]
가중치2 = [4.5, 2.1, -1.7, 3.4]
가중치3 = [2.3, -6.4, 2.1, -6.3]
편향1 = 2
편향2 = 3
편향3 = 1

출력값1 = 입력값[0]*가중치1[0] + 입력값[1]*가중치1[1] + 입력값[2]*가중치1[2] + 입력값[3]*가중치1[3]\
+ 편향1
출력값2 = 입력값[0]*가중치2[0] + 입력값[1]*가중치2[1] + 입력값[2]*가중치2[2] + 입력값[3]*가중치2[3]\
+ 편향2
출력값3 = 입력값[0]*가중치3[0] + 입력값[1]*가중치3[1] + 입력값[2]*가중치3[2] + 입력값[3]*가중치3[3]\
+ 편향3

출력값 = [출력값1, 출력값2, 출력값3]

print(출력값)

[Copyright ⓒ 블로그채널 무단전재 및 재배포 금지]