티스토리 뷰

 1. 손실 함수

손실 함수는 실제값과 예측값 차이를 수치화해주는 함수이다. 차이가 심할수록 손실 함수의 값이 크고 오차가 작을 수록 손실 함수의 값은 작아진다. 회귀에서는 평균 제곱 오차, 분류에서는 크로스 엔트로피를 사용한다. 손실 함수의 값을 최소화하기 위한 가중치와 편향을 찾는것이 딥 러닝의 학습 과정의 주요점이다. 따라서 손실 함수의 값을 잘 선정해야한다.

 

MSE(Mean Squared Error)

평균 제곱 오차는 연속형 변수를 예측할 때 사용한다.

model.compile(optimizer='adam', loss='mse', metrics=['mse'])

 

이진 크로스 엔트로피

출력층에서 시그모이드 함수를 사용하는 이진 분류에서 사용한다.

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])

카테고리칼 크로스 엔트로피

출력층에서 소프트맥스 함수를 사용하느 다중 클래스 분류일 경우에 사용한다.

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])

2.배치 크기에 따른 경사 하강법

손실 함수의 값을 줄이면서 학습하는 방법은 어떤 옵티마이저를 사용하느냐에 따라 달라진다. 배치란 가중치 등의 매개 변수의 값을 조정하기 위해 사용하는 데이터의 양이다. 전체 데이터를 모두 사용해서 매개변수의 값을 조정하거나 일부 데이터만 가지고 매개 변수의 값을 조정할 수 있다.

 

배치 경사 하강법은 옵티마이저 중 하나로 오차를 구할 때 전체 데이터를 사용하는 방법이다. 전체 데이터에 대한 한번의 훈련을 1에포크라고 한다. 배치 경사 하강법은 1에포크에 모든 매개변수 업데이트를 한번 실행한다. 배치 경사 하강법은 전체 데이터를 학습하므로 매개 변수 업데이트가 오래 걸리고 메모리를 크게 요구한다.

 

model.fit(X_train, y_train, batch_size=len(X_train))

 

확률적 경사 하강법

전체 데이터를 대상으로 하는 경우는 시간이 너무 오래 걸리다보니 배치 크기가 1인 경사 하강법을 사용해 랜덤한 데이터에 대해서만 계산하는 경우이다.

model.fit(X_train, y_train, batch_size=1)

미니 배치 경사 하강법

배치 크기를 지정해 해당 데이터 개수만큼만 계산하는 방법이다.

model.fit(X_train, y_train, batch_size=128)

 

3. 옵티마이저

 

모멘텀

모멘텀은 관성이라는 물리학의 법칙을 응용한 방법이다. 모멘텀 경사 하강법에 관성을 더 해준다. 

모멘텀은 경사 하강법에서 계산된 접선의 기울기에 한 시점 전의 접선의 기울기값을 일정한 비율만큼 반영한다. 

전체 함수에 걸쳐 최소값을 글로벌 미니엄이라고 하고, 글로벌 미니엄이 아닌 특정 구역에서의 최소값을 로컬 미니멈이라고 한다. 로컬 미니멈에 도달했을 때, 글로벌 미니머으로 잘못 인식하여 탈출하지 못하였을 상황에서 관성의 힘을 빌리면 값이 조절되고, 로컬 미니멈에서 탈출해 더 낮은 로컬 미니멈으로 갈 수 있다.

tf.keras.optimizers.SGD(lr=0.01, momentum=0.9)

아다그라드

모든 변수에 동일한 학습률을 적용하는 것은 비효율적이다. 아다그라드는 각 매개변수에 서로 다른 학습률을 적용하는 방법이다. 변화가 많은 매개변수는 학습률이 작게 설정되고, 변화가 적은 매개변수는 학습률을 높게 설정시킨다.

tf.keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)

알엠에스프롭

아다그라드는 학습을 진행하다 보면 학습률이 지나치게 떨어지는데 이를 다른 수식으로 대체해 단점을 개선한다.

tf.keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)

아담

아담은 알엠에스프롭과 모멘텀을 합친 방법으로 방향과 학습률을 모두 잡을 수 있다.

tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

각 옵티마이저 인스턴스는 compile의 optimizer에서 호출한다. 예를 들어 아담은 다음과 같이 작성한다.

adam = tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['acc'])

에포크와 배치 크기와 이터레이션

실제값과 예측값의 오차로부터 옵티마이저를 통해 가중치를 업데이트한다. 에포크와 반복의 차이를 알아본다.

에포크란 인공 신경망에서 전체 데이터에 대해 순전파와 역전파가 끝난 상태이다. 1에포크는 모든 문제를 끝까지 다 풀고, 정답지로 채점도 하고 틀린문제에 대한 공부까지 한 상태이다.

 

배치크기는 몇개의 데이터 단위로 매개변수를 업데이트 하는지를 말한다. 근데 배치의 수와 배치 크기는 다른 개념이다. 전체 데이터가 2000일 때 배치 크기를 200으로 하면 배치의 수는 10이고 배치의 수를 이터레이션이라고 한다. 이터레이션은 1에포크당 매개변수 업데이트가 10번 일어난다는 의미이다. 

'머신러닝 > 딥러닝' 카테고리의 다른 글

케라스 훑어보기  (1) 2022.09.16
과적합을 막는 방법  (0) 2022.09.16
행렬곱으로 이해하는 신경망  (0) 2022.09.15
인공 신경망  (0) 2022.09.15
퍼셉트론  (0) 2022.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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 29 30
글 보관함