| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 바이오파이썬
- SVM
- MERS
- Kaggle
- 인공지능
- 생명정보학
- 바이오인포매틱스
- AP Computer Science A
- 인공신경망
- BLaST
- AP
- bioinformatics
- ncbi
- 시그모이드
- 서열정렬
- 블록체인
- 인공지능 수학
- RNN
- HMM
- 파이썬
- 결정트리
- CNN
- 생물정보학
- 이항분포
- COVID
- Java
- 캐글
- 자바
- 오류역전파
- 딥러닝
- Today
- Total
데이터 과학
오류역전파의 간단한 원리 본문
인공 신경망에서의 오류역전파는 입력과 은닉층(Hidden layer)의 연산의 결과와 활성화 함수(activate function)의 발산으로 구성되어 있다.
- 입력값 → 은닉층 연산 (가중치 곱 + 편향 더하기)
- 은닉층 연산 결과 → 활성화 함수 적용 (예: sigmoid, ReLU 등)
- 은닉층의 출력 → 다음 은닉층 입력 → 연산 (가중치 곱 + 편향 더하기)
- 두 번째 은닉층 출력 → 활성화 함수 적용
- 출력층에서 최종 결과 산출
- 출력 결과와 정답(타깃) 간 오차 계산 (예: MSE, Cross-Entropy)

이후에 오차값을 바탕으로 변화율을 만들어 내야 하는데 이때 사용하는 것이 미분인데 미분의 연속이 모여서 만든 개념이 경사 하강법이다.
https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95
경사 하강법 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 경사 하강법(傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계
ko.wikipedia.org
경사하강법은 점차적으로 변화율이 낮아진다는데 목표를 두고 학습률 (learning rate)를 연산하여서 변화율의 폭을 조절한다.
그렇다면 결과값의 오차를 어떤 방식으로 반영해서 변화율을 조절하느냐인데 이것은 변화율에 대한 비율을 간단하게 계산하여 전사행렬(transpos mtrix)로 은닉층에 변화율을 반영하면 된다.
변화율을 역으로 반영한다고 하여서 error- Backpropagtion Algorithm이라고 하는데 기본은 전방향 알고리즘이다.
파이썬의 numpy에서 구현을 하면 다음과 같은 프로그램이 되겠다.
delta1,2는 변화율을 표기한 것이며
w2는 두번째 웨이트값
w1은 첫번째 웨이트값이다.
| delta2 = (Y-y) * (Y * (1-Y)) delta1 = np.dot(delta2, w2.T) * (a1 * (1-a1)) w2 -= alpha * np.dot(a1.T, delta2) w1 -= alpha * np.dot(x.T, delta1) |
위 프로그램에서 보면 delta1에 w2.T 에서 두번째 웨이트 값을 전치행렬로 만들어 놓았으며
w2에서는 a1.T 이라고 표기하였다. a1은 아래 순방향 연산 소스를 보면 첫번째 활성화 함수의 발산값이다.
w1에서는 x.T 라고 x를 전치행렬로 표기하였다.
- 순방향 연산
| z1 = np.dot(x, w1) a1 = act(z1) z2 = np.dot(a1, w2) Y = act(z2) |
그렇다면 전치행렬을 쓰는 이유는 무엇일까.

전방향의 경우는 순방향 행태로 일반적인 행렬 연산을 쓰면 된다.
h1은 w11과 w21이 영향을 준다.

역방향일 경우는 영향 받는 은닉층 값들이 다르다.
x1의 경우는 w11과 w12가 영향을 준다.
그렇기 때문에 전치행렬을 사용하여 가로 세로를 바꿔서 연산을 하게 된다.
이 방법을 그래도 순방향과 역방향 형태로 계속 반복적으로 학습을 하게 된다면 오차는 점점 작아지게 되면서 은닉층의 값들은 변화 하게 될것이다.
어느 순간 오차범위가 원하는 범위 안에 들어 온다면 학습을 멈추게 된다.
| if math.sqrt(sum((Y-y)**2)/4) < 0.05: break |
학습이 멈추면 정교화된 은닉층 값을 통해 새로운 데이터를 입력하면 학습 된 결과를 확인 할 수 있다.
원리는 간단하다. 정방향 -> 역방향 -> 정방향 -> 역방향 -> 정방향 -> 역방향..... 언제까지?
오차가 원하는 숫자 이하로 나올때 까지 학습하면 된다.
'인공지능 > 기초 인공신경망' 카테고리의 다른 글
| 멀티레이어 퍼셉트론 (0) | 2022.03.13 |
|---|---|
| 반가산기와 전가산기 (6) | 2022.03.13 |
| 퍼셉트론 (4) | 2022.03.09 |
| 인공지능 분류와 역사 (0) | 2021.09.26 |
| 인공지능의 기본 이론 (0) | 2021.09.26 |