① 데이터와 목적에 맞게 신경망 구조를 설계
② 가중치를 랜덤하게 초기화
③ 순전파를 통해 출력값을 모든 입력 데이터에 대해 계산
④ 비용함수(Cost Function, J(θ))를 계산
⑤ 역전파를 통해 각 가중치에 대한 편미분 값을 계산
⑥ 경사하강법을 사용하여 비용함수인 J(θ) 를 최소화하는 방향으로 가중치를 갱신
⑦ 중지 기준을 충족하거나 비용 함수를 최소화 할 때까지 2~5단계를 반복(한번 반복 = iteration)
신경망은 손실 함수를 최소화 하는 방향으로 가중치를 갱신한다(손실함수를 잘 정의 해야함)
(Backpropagation : backwards propagation of errors)
순전파와 반대 방향으로 손실정보를 전달해주는 역할
가중치 w1, w2 업데이트
⑤ w1 = X.T와 z2_delta의 곱
w2 = layer1(은닉층) 활성화 함수의 함수값(activated_hidden)과 o_delta의 곱
입력값 X
Input : 2개 < I I >
w1 : layer1(은닉층)의 가중치 (shape 2X3)
---- ④ z2_delta = z2_error * 시그모이드 도함수(은닉층 활성화 함수의 함수값) ----
---- # dError/dh = (dError/dY)*(dY/dy)*(dy/dh)----
Hidden : 3개 < H H H >
---- ③ z2_error = o_delta와 layer2의 가중치(w2.T)의 곱 ----
---- #dError/dH = (dError/dY)*(dY/dy)*(dy/dH) ----
w2 : layer2(출력층)의 가중치 (shape 3X1)
----② o_delta = o_error * 시그모이드 도함수(출력값) ----
---- #dError/dy = (dError/dY) * (dY/dy) ----
Output : 1개 < O >
출력값 o
---- ① o_error(타겟값 - 출력값 = 손실) #dError/dY----
타겟값 y
해당 함수의 최소값 위치를 찾기 위해 비용 함수(Cost Function)의 경사 반대 방향으로 정의한 Step Size를 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾으려는 방법
※ 경사 하강법을 통해 최저점을 찾는 메커니즘은 볼록 함수에서만 잘 동작한다
※ 실제 손실함수는 볼록과 오목함수가 섞여있어서 전역최적점(global optima)를 찾지 못하고 지역최적점(local optima)에 빠질 수 있다
지역 최적점에 빠지게 되는 문제를 방지하기 위한 여러가지 방법 중 하나
경사를 내려가는 방법을 결정하는 알고리즘
신경망 학습 메커니즘
1. 학습 데이터 로드(Load data)
2. 모델 정의(Define model)
3. 컴파일(Compile)
4. 모델 학습(Fit)
5. 모델 검증(Evaluate)
1. 학습 데이터 만들기
X_train, y_train
2. 신경망을 구축하고 compile
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
# 신경망 모델 구조 정의
model.add(Dense(3, input_dim=2, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='sgd',
loss='mse',
metrics=['mae', 'mse'])
# 분류인 경우
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
results = model.fit(X_train,y_train, epochs=50)