이전 글에서 만든 경사 하강법 알고리즘을 Neuron이라는 이름의 파이썬 클래스로 만들어보겠다. 즉, 뉴런을 만들어보겠다. 이후에 포스팅할 알고리즘들은 이 클래스를 기반으로 확장된다.
위의 코드를 보면 코드는 간단하지만 딥러닝이 사용하는 경사 하강법 알고리즘의 핵심이 담겨 있는걸 볼 수 있다. 딥러닝은 이렇게 간단한 연산의 조합으로 이루어져 있다.
__init__()은 초기화 메서드다 가중치와 절편을 각각 1.0으로 초기화해줬다.
forpass()는 정방향 계산을 위한 메서드이다. 여기서 정방향 계산이란 쉽게말해 y^을 구하는 것이다. w, x, b가 뉴런의 왼쪽에서 오른쪽 방향으로 흘러 y^이 되기때문에 정방향 계산이라는 용어를 사용한다.
backprop()는 역방향 계산을 위한 메서드이다. 여기서 역방향 계산이란 정방향 계산으로 얻은 y^과 y의 차이인 오차가 뉴런의 오른쪽 방향에서 왼 쪽 방향으로 흘러서 가중치와 절편을 다시 업데이트를 하기 때문에 역방향 계산이라는 용어를 사용한다. 그리고 오차가 역으로 전파되니까 오차 역전파라는 말을 사용하는 것을 알 수 있다.
fit() 메서드는 정방향 계산으로 구한 y_hat과 역방향 계산으로 구한 가중치와 절편의 그레디언트를 이용해 훈련하는 메서드이다.
이제 위에서 만든 뉴런을 이용해 실제 훈련해 보겠다. 뉴런 객체를 생성하고 fit()메서드를 호출한다.
학습이 완료된 가중치와 절편은 neuron.w와 neuron.b에 저장되어 있다. 이 값을 이용하여 산점도 위에 직선 그래프를 그려보겠다.
경사 하강법을 적용한 뉴런 구현을 끝마쳤다. 신경망 모델을 사용하는 딥러닝은 항상 경사 하강법 알고리즘을 사용하므로 경사 하강법 알고리즘이 딥러닝의 핵심 요소 중 하나라고 할 수 있다.
'머신러닝&딥러닝 > Do it ! 딥러닝 입문' 카테고리의 다른 글
시그모이드 함수로 확률 만들기 (0) | 2020.11.28 |
---|---|
초기 인공지능 알고리즘과 로지스틱 회귀 (1) | 2020.11.26 |
손실 함수와 경사 하강법의 관계 (0) | 2020.11.25 |
경사 하강법 (0) | 2020.11.23 |
선형 회귀와 데이터 준비 (0) | 2020.11.22 |