[비트교육센터][AI] AI 2일차 기초수학, 뉴런, 순전파, 역전파, 은닉층, 출력층
1. 기초수학
1. 시그마
- 여러 값의 합을 간단히 표현
2. 스칼라
- 방향을 가지지 않고 크기만 가지는 물리량
- 일반적인 수치를 의미
a=1
b=1.5
c=-3
d=1.8e5=0.000018
3. 벡터
- 여러 개의 수치를 한 곳에 모아 다루는 방법
- 크기와 방향이 존재
[1] 1차원 벡터
[2] 2차원 벡터
- 2차원 공간상 벡터의 크기
[3] 3차원 벡터
- 3차원 공간상 벡터의 크기
[4] n차원 벡터
- 벡터크기
- n차원 공간상의 벡터의 크기
[5] 횡벡터, 종벡터
- 횡벡터: 가로로 늘어선 벡터
- 종벡터: 세로로 늘어선 벡터
[6] 행렬
1) 수를 직사각형 형태로 나열
- 행과 열로 크기를 표현(행 * 열)
2) 정방행렬
- 행과 열의 크기가 같음
3) 행렬의 표기
- 행렬은 대문자 표시
- 행렬의 각 성분은 소문자 표시
- 각 성분의 행과 열 정보는 아래첨자 사용
4) 단위 행렬
- 주 대각선(좌상단에서 우하단 방향으로의 대각선)의 원소가 모두 1
- 나머지 원소는 모두 0
- 정방행렬
5) 전치 행렬
- 행과 열을 교환하여 얻는 행렬
- 행렬 이름에 윗 첨자로 T를 표시
6) Element wise 연산
- 행렬의 원소간 연산
- 연산에 참여하는 행렬은 모두 차원이 일치해야 함
7) 아디마르 곱
- 행렬의 원소간 곱셈
- Element wise 연산
8) 행렬 곱셈
- 선형 변환의 합성을 위해 사용
2. 미분
1. 기울기
- 직선의 기울어진 정도를 표현
- 기울기와 출력
1) 입력이 1만큼 증가시 출력은 기울기 m 만큼 증가한다.
2) 즉, 기울기는 입력에 대한 출력의 변화율을 의미한다.
2. 미분
[1] 미분의 원리
- \(y=\frac{1}{8}x^{2} \)의 그래프이다.
- \(x_{1}=2, f(x_{1})=0.5\)
- \(x_{2}=8, f(x_2)=8 \)
- \(m=\frac{f(x_2)-f(x_1)}{x_{2}-x_{1}}\), m은 f(x)의 구간 \((x_{1},x_{2})\)의 평균 기울기이다.
[2] 기본적인 미분 방법
- \(f(x) = w_{1}x^{n} + w_{2}x^{n-1} + ... + w_{n}x + b \)
- \(f'(x) = \frac{dy}{dx}=nw_{1}x^{n-1}+(n-1)w_{2}x^{n-2}+...+w_{n}\)
- \(f(x)=3x^2+2x+1\)
- \(f'(x)=6x+2 \)
3. 합성함수 미분
[1] 합성함수
- \(u=f(x),y=g(u),y=g(f(x)),y=g(u)f(x) \)
4. 편미분
[1] 편미분 방법
- 다변수 함수의 특정 변수를 제외한 나머지 변수를 상수로 간주하여 미분한다.
- \(y=3x^2+2t^3+z+10\)
- \(\frac{dy}{dx}=6x\)
- \(\frac{dy}{dt}=6t^2\)
- \(\frac{dy}{dz}=1\)
3. 회귀와 분류
1. 회귀
[1] 데이터의 추세 표현
- 연속적인 수치 예측
- 키와 몸무게의 관계, 주가 예측, 인구 성장 추이등
2. 분류
[1] 데이터를 정해진 범주에 따라 분류
- 주어진 데이터를 미리 정해둔 레이블에 따라 분류
- 개와 고양이 이미지 분류, 주제에 따른 기사 분류 등
4. 활성화 함수
1. sigmoid
- 입력값이 어떤 범위에 들어갈 때 출력 값이 0과 1 사이에서 급격하게 변하는 특성을 가지고 있다.
- 이러한 특성 때문에 시그모이드 함수는 이진 분류 문제에서 출력 레이어의 활성화 함수로 널리 사용된다.
[1] 대표적인 활성화 함수
import numpy as np
import matplotlib.pyplot as plt
def sigmoid_function(x):
return 1/(1+np.exp(-x))
x=np.linspace(-5,5)
y=sigmoid_function(x)
plt.plot(x,y)
plt.show()
--> 결과
2. tanh
[1] 특징
import numpy as np
import matplotlib.pyplot as plt
def tanh_function(x):
return np.tanh(x)
x = np.linspace(-5, 5)
y = tanh_function(x)
plt.plot(x, y)
plt.show()
--> 결과
3. ReLu(Rectified Linear Unit)
[1] 특징
import numpy as np
import matplotlib.pyplot as plt
def relu_function(x):
return np.where(x <= 0, 0, x)
x = np.linspace(-5, 5)
y = relu_function(x)
plt.plot(x, y)
plt.show()
--> 결과
4. Leaky ReLU
[1] 특징
import numpy as np
import matplotlib.pyplot as plt
def leaky_relu_function(x):
return np.where(x <= 0, 0.01*x, x)
x = np.linspace(-5, 5)
y = leaky_relu_function(x)
plt.plot(x, y)
plt.show()
-->결과
5. Softmax
[1] 특징
- 입력을 0~1 값으로 모두 정규화
- 출력값의 총 합은 1
- 확률분포를 해준다.
import numpy as np
def softmax_function(x):
return np.exp(x)/np.sum(np.exp(x))
y = softmax_function(np.array([1,2,3]))
print(y)
--> 결과
[0.09003057 0.24472847 0.66524096]
5. 인공신경
1. 뉴런
- 뇌의 생물학적 뉴런을 모방해 만들어진 기본 단위로, 인공 신경망의 기본 구성요소이다.
1) 입력: 다른 뉴런으로부터 입력신호를 받는다. 보통 실수값이고 뉴런의 가중치와 곱해져 중간 계산에 사용된다.
2) 가중치: 입력에 대한 각각의 가중치가 존재한다. 뉴런이 학습을 통해 최적의 값을 찾게 되는 매개변수이다.
3) 편향: 뉴런이 출력을 계산시, 입력에 대한 가중치를 곱한 뒤 추가로 편향을 더한다. 각 뉴런마다 다른 값을 가지고, 학습 과정에서 최적의 값으로 조정된다.
4) 활성화 함수: 뉴런의 출력 값을 결정하는 함수로, 입력과 가중치, 편향의 조합을 하나의 값으로 변환한다. 일반적으로 비선형 함수가 사용되며, 신경망이 복잡한 문제를 해결할 수 있다.
- 입력을 \(x_{1},x_{2},x_{3}, ... ,x_{n} \) (feature)
- 각 입력에 곱해지는 가중치를 \(w_{1},w_{2},w_{3}, ... ,w_{n} \) (weight)
- 각 입력에 대한 가중치를 곱은 \(xw\)로 표현
- 각 입력과 가중치의 수가 n개 일 때, 다음처럼 표현된다.
- 위 결과에 편향(bias) b를 더한 결과는 다음과 같다.
- 앞 결과 u를 활성화 함수 f에 입력한다.
- f의 출력을 y라 하면, y는 다음처럼 표현된다.
- 위 식의 입력을 벡터 X로, 가중치를 벡터 W로 표현했다.
- 이 두 벡터를 행렬곱으로 표현한다.
- 최종 뉴런의 입력과 출력을 수식으로 표현한다.
6. 단일 뉴런
1. 단일 뉴런 구현
- 인공 신경망의 가장 기본적인 구성요이다. 입력을 받아 가중치와 편향을 적용한 뒤 활성화 함수를 통해 출력을 계산한다.
1) 딥러닝에서 가중치와 편향은 임의의 수로 설정한다.
2) 학습하는 과정에서 가중치와 편향을 수정하고 구현하는 과정에서는 고정한다.
3) 가중치와 편향이 신경망 출력에 미치는 영향을 확인한다.
4) 입력값(feature)으로 2개의 값 \(x_{1},x_{2}\) 을 사용한다.
5) 활성화 함수는 sigmoid를 사용한다.
[1] 예제
import numpy as np
import matplotlib.pyplot as plt
- numpy와 matplotlib를 import한다.
x1 = np.arange(-1.0,1.0,0.2)
x2 = np.arange(-1.0,1.0,0.2)
- x1, x2 배열을 반든다. -1.0에서 1.0까지 범위를 설정해 0.2씩 증가한다.
z=np.zeros((10,10))
- 10행 10열의 2차원 배열을 만들고 전부 0으로 채운다.
w=np.array([2.5,3.0])
#w=np.array([-2.5,-3.0])
#w=np.array([0,3.0])
#bias = np.array([0.1])
#bias = np.array([-2.0])
bias = np.array([1.0])
- 가중치(w)와 편향(bias)을 생성한다.
- 가중치는 2.5와 3.0의 입력에 대한 가중치를 설정한다.
- 편향은 1.0으로 설정해 모든 뉴런에 대해 1.0이 더해진다.
for i in range(10):
for j in range(10):
x=np.array([x1[i],x2[j]])
u=np.dot(x,w.T)+bias #T: 전체행렬
y=1/(1+np.exp(-u))
z[j][i]=y
#z[j][i]=y[0] #이후버전에서는 y를 지원안하고 y[0]인덱스를 입력해달라고 할수 있음.
- x=np.array: x1[i]와 x2[j]값을 갖는 2개의 요소를 가진 1차원 배열을 생성한다.
- u=np.dot(x,w.T)+bias: x와 w사이의 내적(dot)을 계산해 선형 변환을 수행한다. w.T는 w의 전채행렬로, w와 x의 내적을 통해 두 입력 특성에 대한 가중 합을 구한다. 그리고 편향(bias)을 더해 u를 계산한다.
- 그다음 u값을 통해 시그모이드 함수를 적용해 u를 활성화 함수 입력으로 변환한다.
- z의 j와 i위치에 계산된 출력값 y를 생성한다.
==> z배열은 이제 입력 x1,x2에 대한 뉴런의 출력값으로 채워진다.
plt.imshow(z,'gray',vmin=0.0,vmax=1.0)
plt.colorbar()
plt.show()
- z배열을 시각화한다.
--> 결과
- 그래프가 진한 부분은 뉴런이 적게 활성화되고 밝은 곳은 뉴런이 활성화되는 곳이다.
7. 신경망 분석
1. 가중치 행렬
- 가중치행렬: 뉴런 간의 연결강도를 나타내는 값들의 배열이다.
- 뉴런으로의 m개의 입력을 \(x_{1},x_{2},x_{3}, ... ,x_{m} \) (feature)
- 출력 뉴런(node)의 수는 n
- 이 때 각 입력에 대응하는 가중치(weight)행랼 W는 다음과 같다.
- n개의 출력을 만들기 위해 W는 n개의 열을 가져야 한다.
2. 편향 벡터
- 편행 벡터: 출력 뉴런에 더해지는 상수값으로 활성화 함수에 대한 변환을 조절하거나 편향이 없는 선형 변환을 비선형으로 만든다.
- 이 때, 편향의 수도 출력 뉴런의 수와 동일한 n개가 필요하다.
- 각 입력과 가중치곱의 합이 다음과 같이 n개가 생성된다.
3. 최종 출력
- 평향 B를 더한 결과는 다음과 같다.
- 위 결과에 활성화 함수 f를 적용해 출력 Y를 구하면 다음과 같다.
4. 완전 연결 층
- 지금까지의 결과를 그름으로 표현시 모든 입력이 출력으로 연결된 fully connected layer(완전 연결 층)를 구성한다.
5. 딥러닝 네트워크
- 출력 Y를 다음층의 입력으로 사용한다.
8. 신경망 구현(회귀)
- 입력데이터를 바탕으로 연속적인 값을 예측하는 작업을 의미한다.
1. 회귀문제 신경망 구현
- 입력층 노드 2개
- 은닉층 노드 2개
- 출력층 노드 1개
- 은닉층 활성화 함수는 시그모이드
- 출력층 활성화 함수는 항등함수
[1] 예제
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-1.0,1.0,0.2)
y = np.arange(-1.0,1.0,0.2)
z=np.zeros((10,10))
w_im = np.array([[4.0,4.0],
[4.0,4.0]])
w_mo = np.array([[1.0],
[-1.0]])
- w_im: 입력층(input layer)과 은닉층(hidden layer) 사이의 가중치를 나타낸다. [i,j]이면 i는입력층의 i번째 특성이고 j는 은닉층의 j번째 뉴런 사이의 가중치를 나타낸다.
- w_mo: 은닉층과 출력층 사이의 가중치를 나타낸다. [1.0]을 예로 들면 1.0번째의 뉴런과 출력층의 뉴런사이의 가중치를 나타낸다.
b_im = np.array([3.0, -3.0])
b_mo = np.array([0.1])
- b_im: 은닉층의 편향벡터로 은닉층의 각 뉴런들은 입력값에 대한 가중합과 편향을 적용뒤 활성화 함수를 통과해 출력값을 계산한다.
- b_mo: 출력층의 편향벡터로 출력층의 뉴런은 은닉층의 출력값에 대한 가중합과 평향을 적용뒤 활성화 함수를 통해 최종 출력값을 계산한다.
def middle_layer(x,w,b):
u = np.dot(x,w)+b
return 1/(1+np.exp(-u))
#은닉층 계산과정을 나타낸다.
#x는 입력데이터, w는 가중치, b는 편향이다.
#입력데이터를 받아 가중치와 편향을 사용해 시그모이드 함수를 적용해 반환한다.
def output_layer(x,w,b):
u = np.dot(x,w)+b
return u
#출력층을 계산한다.
#입력데이터, 가중치, 편향을 사용해 활성화 함수 없이 계산결과를 반환한다.
#출력층에는 활성화 함수를 적용하지 않는다. 계산 결과 그대로 출력한다.
for i in range(10):
for j in range(10):
inp = np.array([x[i],y[j]])#입력데이터로 i,j좌표의 x,y값을 가진 numpy배열을 생성한다.
mid = middle_layer(inp, w_im, b_im)#은닉층 함수이다.
out = output_layer(mid, w_mo, b_mo)#출력층 함수이다. 최종출력 값을 계산한다.
z[j][i] = out[0]#최종출력값을 z배열에 저장한다.
plt.imshow(z,'gray',vmin=0.0,vmax=1.0)#z배열을 흑백이미지로 표시한다.
plt.colorbar()
plt.show()
--> 결과
9. 역전파
1. 역전파와 순전파
- 순전파: 지금까지 입력값과 가중치곱의 합을 활성화 함수를 통해 출력하는 것을 의미한다.
- 역전파: 신경망을 학습시키는 알고리즘으로 출력값과 정답의 오차를 계산한다. 네트워크를 거슬러 올라가 이 오차를 이용해 각 가중치와 편향을 최적화한다.
2. 역전파 방법
- 순전파로 얻은 출력값과 정답과의 오차를 계산한다.
- 각 층을 거슬러 올라가며 이 오차를 역방향으로 전파한다.
- 각 층에서는 전파된 오차를 이용해 가중치와 편향의 수정량을 계산한다.
- 모든 층의 가중치와 편향을 조금씩 수정한다.
- 위 과정을 반복하여 네트워크를 최적화한다.
3. 회귀문제 신경망 구현
- 훈련데이터, 테스트 데이터
- 오차함수 또는 손실함수
- 경사하강법
- 최적화 알고리즘
- 배치: 한번 연산에 들어가는 데이터 크기
10. 데이터 분리
1. 훈련 데이터/테스트 데이터
- 훈련 데이터: 신경망이 학습에 이용하는 데이터
- 테스트 데이터: 학습결과의 검증에 사용하는 데이터
- 각데이터는 여러개의 입력값(feature)과 정답(target)으로 구성되어있다.
- 입력값과 정답, 한쌍을 샘플이라고 함.
- 훈련 데이터의 샘플수 > 테스트 데이터의 샘플수
- 훈련 데이터로 학습이 잘 된 신경망의 경우, 테스트 데이터에서 좋은 결과가 나온다.
==> 모델 일반화가 잘된 것임
2. 예제
import numpy as np
import matplotlib.pyplot as plt
#numpy, matplotlib모듈을 임포트한다.
x = np.arange(-1.0,1.0,0.1)
y = np.arange(-1.0,1.0,0.1)
#데이터를 -1.0에서 1.0까지 0.1간격으로 숫자배열을 생성한다.
w_im = np.array([[1.0,2.0],
[2.0,3.0]])#입력층에서 은닉층으로의 가중치이다.
w_mo = np.array([[-1.0,1.0],
[1.0,-1.0]])#은닉층에서 출력층으로의 가중치이다.
b_im = np.array([0.3, -0.3])#입력층에서 은닉층으로의 편향값이다.
b_mo = np.array([0.4,0.1])#은닉층에서 출력층으로의 편향값이다.
#편향은 뉴런이 얼마나 쉽게 활성화 되는지 조절해주고, 학습과정 중에서 조정되어 신경망 성능을 개선한다.
def middle_layer(x,w,b):
u = np.dot(x,w)+b
return 1/(1+np.exp(-u))
#입력층에서 은닉층으로 전달과정을 나타내는 함수이다.
def output_layer(x,w,b):
u = np.dot(x,w)+b
return np.exp(u) / np.sum(np.exp(u))
#은닉층에서 출력층으로 전달과정을 나타내는 함수이다.
#마지막 출력값은 소프트맥스 활성화 함수를 적용했다.
x_1=[]
y_1=[]
x_2=[]
y_2=[]
#x_1과 y_1은 소프트맥스에서 첫번째 클래스로 분류된 데이터 x,y좌표를 저장한다.
#x_2과 y_2은 소프트맥스에서 첫번째 클래스로 분류된 데이터 x,y좌표를 저장한다.
for i in range(20):
for j in range(20):
inp = np.array([x[i],y[j]])#현재의 좌표를 저장한다.
mid = middle_layer(inp, w_im, b_im)#은닉층을 통과한 출력을 계산한다.
out = output_layer(mid, w_mo, b_mo)#출력층을 통과한 소프트맥스 출력을 계산한다.
if out[0] > out[1]:#out의 첫번째 값이 두번째 값보다 클때 첫번째 클래스로 분류한다.
x_1.append(x[i])
y_1.append(y[j])
else: #그렇지 않을경우 두번째 클래스로 분류한다.
x_2.append(x[i])
y_2.append(y[j])
plt.scatter(x_1, y_1, marker="+")#첫번째 클래스는 +로 표시한다.
plt.scatter(x_2, y_2, marker="o")#두번째 클래스는 o로 표시한다.
plt.show()
--> 결과
11. 손실함수
1. 오차(손실)
- 회귀문제와 정답과 출력
- 분류문제의 정답과 출력
2. 평균제곱오차
import numpy as np
def mean_squared_error(y, t):
return np.sum(np.power(y - t, 2)) / y.shape[0]
3. 오차제곱합
import numpy as np
def square_sum(y, t):
return 1.0/2.0 * np.sum(np.square(y - t))
4. 교차 엔트로피
- 엔트로피: 하나의 변수가 가지는 확률 분포의 불확실성을 의미한다.
- 교차 엔트로피: 하나의 변수가 가질 수 있는 서로 다른 분포를 가질경우, 해당 분포들의 차이를 의미한다.
- 결국 오차는 y = -log(x)형태를 취한다.
- x를 \(t_{k} \)로 보면 1일 경우 0이다.
- x가 0에 급접할 수록 무한대로 발산한다.
- \(t_{k} \)가 1에 근접할 수록 오차가 작아진다.
import numpy as np
def cross_entropy(y, t): # 출력, 정답
return - np.sum(t * np.log(y + 1e-7))
12. 손실함수
1. 기본 개념
- 정답과 출력간의 오차는 오차함수로 구한다.
- 이렇게 구한 오차는 각 층마다 계산에 투입된 가중치와 편향들의 함수를 볼 수 있다.
- 특정 가중치 \(w_{ij} \)와 오차 E와의 함수 관계가 다음과 같다고 가정한다.
13. 기울기
1. 오차에 대한 기울기
- 순전파를 통해 각 층의 출력을 구함
- 최종 출력과 정답간의 오차를 구함
- 최종 오차에 대한 각 층의 가중치 및 편향들의 기울기 계산
14. 출력층 기울기
1. 출력층 뉴런
- \(y_{j} \)는 은닉층의 j번째 출력
- \(w_{jk} \)는 가중치(j,k)
- \(b_{k} \)는 k번째 편향
- \(u_{k} \)는 k번째 가중치곱과 편향의 합
- \(y_{k} \)는 k번째 출력
2. 가중치 기울기
- 가중치 기울기: 인공 신경망의 학습 과정에서 손실 함수를 최소화하기 위해 사용되는 값이다. 각 가중치는 손실함수에 대해 얼마나 영향을 미치는지를 나타내는 값이다.
- 오차 E를 가중치 \(w_{jk} \)로 편미분한 \(\frac{\partial E}{\partial w_{jk}} \)를 구한다.
- 구한 가중치 기울기를 다음처럼 치환한다.
- 그리고 합성함수 미분법칙을 사용해 위에처럼 전개한다.
[1] 오른쪽식 전개
- 전개한 미분 법칙의 오른쪽을 정리해보겠다.
- 여기에서 \(u_{k} \)값은 괄호에 있는거 푼것이다.
- 들어오는 은닉층의 출력값들을 가중치와 곱하고 더한후 편향값을 더한다. 그다음 편미분을 한다.
- 나온 값은 오차에 대한 j번째 행 k번째열의 가중치의 기울기가 \(y_{j} \)이다.
[2] 왼쪽식 전개
- 이번에는 왼쪽 부분을 전개하였다.
- 오차를 출력층 누런의 출력으로 편미분한 것과 그 출력값을 \(u_{k}\)로 편미분한 것의 곱으로 표현한다.
- \(\frac{\partial E}{\partial y_{k}}\)은 손실함수를 k번째의 y로 편미분하고 \(\frac{\partial y_{k}}{\partial u_{k}}\)은 활성화 함수를 k번째의 u로 편미분해서 곱하는 것이다.
[3] 정리
- 왼쪽식 전개를 위에 식으로 정리하였다.
- 출력측 뉴런의 사진을 보면 아직 손실 함수와 활성화 함수가 없기 때문에 \(\delta _{k}\)으로 지정하였다.
- [1]과 [2]에서 정리한 식을 위에 처럼 표현할수 있다. 오차에 대한 가중치의 기울기를 \(y_{j}\)와 \(\delta _{k}\)의 곱으로 표현했다.
3. 편향 기울기
- 편향 기울기: 인공 신경망의 학습과정에서 편향을 업데이트하기 위해 사용되는 값이다. 편향은 인공신경망의 각 뉴런에 더해지는 상수 값으로, 해당 뉴런이 얼마나 쉽게 활성화되는지 조절하는 역할을 해준다.
[1] 치환하기
- 오차 E를 편향 \(b_{k}\)로 편미분한 \(\frac{\partial E}{\partial b_{k}}\)를 구한다.
- 이렇게 구한 편향 기울기를 위에 처럼 표기하고 합성함수의 미분법칙을 사용해 전개한다.
[2] 우변 전개하기
- 가중치 기울기에서 전개할때와 비슷하다. 다만 미분시 k번째 b로 미분되기 때문에 \(b_{k}\)빼고 상수 취급되어지고 \(b_{k}\)도 미분되어져서 1이된다.
[3] 정리
- 좌변 부분은 이미 가중치 기울기에서 했으므로 \(\delta _{k}\)로 정의한다.
- 그러면 다음처럼 정의된다.
==> 오차에 대한 편향 기울기는 \(\delta _{k}\)와 동일하다.
4. 입력값 기울기
- 입력값 기울기: 인공신경망에서 입력값이 모델 출력에 미치는 영향력을 나타내는 값이다.
[1] 치환하기
- 출력층에서 입력값은 \(y_{j}\)로 표현한다.
- 오차에 대한 \(y_{j}\)기울기를 아래처럼 표현한다. 그리고 합성함수 미분법으로 전개한다.
[2] 증명하기(우변 오른쪽)
- 위에 처럼 증명한다.
- 그러면 다음처럼 정리된다.
14. 은닉층기울기
- 은닉층 기울기: 인공 신경망에서 은닉층의 출력값이 손실 함수에 어떤 영향을 미치는지를 나타내는 값이다.
- 역전파 알고리즘을 사용시 출력층에서 시작해 은닉층까지 거꾸로 역으로 기울기를 전파한다. 이 과정을 통해 각 층의 가중치와 편향을 업데이트하며 학습이 진행된다.
[1] 은닉층 뉴런
- \(y_{i} \)는 은닉층의 i번째 출력
- \(w_{ij} \)는 가중치(i,j)
- \(b_{j} \)는 j번째 편향
- \(u_{j} \)는 j번째 가중치곱과 편향의 합
- \(y_{j} \)는 j번째 출력
[2] 가중치 기울기
- 오차 E를 가중치 \(w_{ij}\)로 편미분한 \(\frac{\partial E}{\partial w_{ij}}\)를 구한다.
- 이렇게 구한 가중치 기울기를 위에 처럼 표기하고 합성함수의 미분법칙을 사용해 전개한다.
- \(u_{j}\)는 입력층에 있는 여러 뉴런의 출력값과 가중치 곱의 합에 편향을 더한 것이다.
- 이번에는 \(\frac{\partial y_{j}}{\partial u_{j}}\)인 활성화 함수를 미분해서 구한다.
- 그럼 다음과 같은 식이 완성된다.
[3] 편향 기울기
- 오차 E를 가중치 \(b_{j}\)로 편미분한 \(\frac{\partial E}{\partial b_{j}}\)를 구한다.
- 이렇게 구한 편향 기울기를 위에 처럼 표기하고 합성함수의 미분법칙을 사용해 전개한다.
- 오차에 대한 편향 기울기는 \(\delta _{j}\)와 동일하다.