일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 게임개발
- Ajax
- node
- Unseen
- R
- 프메
- JWT
- 으
- 정글사관학교
- 프린세스메이커
- 레베카
- 알고풀자
- 언리얼
- 데이터베이스
- Enhanced Input System
- Bootstrap4
- 마인크래프트뮤지컬
- 미니프로젝트
- EnhancedInput
- VUE
- 언리얼프로그래머
- flask
- 파이썬서버
- Jinja2
- 언리얼뮤지컬
- 스마일게이트
- 디자드
- 스터디
- Express
- 카렌
- Today
- Total
Showing
역전파(backpropagation) 본문
딥러닝에서 역전파는 모델을 학습시키는 데 아주 중요한 역할을 한다.
마치 학생이 시험을 보고 틀린 문제를 분석하여 다음 시험을 더 잘 보기 위해 공부하는 것처럼, 신경망도 역전파를 통해 자신의 오류를 수정하고 성능을 향상한다.
신경망의 학습 과정
- 신경망의 학습 과정: 신경망은 입력 데이터를 받아 특정 값을 예측하는 모델이다. 이 과정에서 가중치라는 것이 있는데, 이 가중치 값에 따라 예측 결과가 달라진다.
- 오차 발생: 신경망이 예측한 값과 실제 값 사이에는 오차가 발생
- 오차 역전파: 이 오차를 줄이기 위해 신경망은 오차를 역으로 전파하며 각 가중치를 조금씩 수정한다. 즉, 오차에 가장 큰 영향을 미친 가중치를 더 많이 수정하는 방식으로 학습한다.
역전파의 과정
- 순전파: 입력 데이터가 신경망을 거쳐 출력 값이 생성되는 과정
- 오차 계산: 예측 값과 실제 값의 차이를 계산하여 오차를 구한다.
- 역전파: 오차를 각 층으로 역전파하며, 각 층의 가중치를 수정한다.
- 가중치 업데이트: 계산된 값을 이용하여 가중치를 업데이트한다.
- 반복: 위 과정을 여러 번 반복하며 오차를 줄여 나간다.
왜 역전파가 중요한가.
- 신경망 학습의 핵심: 신경망이 스스로 학습하고 발전할 수 있도록 하는 핵심적인 알고리즘이다.
- 모델 성능 향상: 역전파를 통해 모델은 더 정확한 예측을 할 수 있도록 발전한다.
- 다양한 문제 해결: 이미지 인식, 자연어 처리, 음성 인식 등 다양한 분야에서 사용되는 딥러닝 모델의 기반이 된다.
1. 역전파(backpropagation)란?
역전파는 딥러닝에서 모델의 가중치를 업데이트하기 위해 기울기를 계산하는 과정이다. 딥러닝 모델은 입력 데이터에서 예측을 만들고, 그 예측이 얼마나 맞았는지 평가하는데, 이때 사용하는 것이 손실 함수이다.
역전파의 목적은 손실 함수의 값을 줄이기 위해 기울기(gradient)를 이용해 모델의 가중치(weight)를 업데이트하는 것이다.
2. 역전파의 과정
- 예측 단계 (순전파, forward pass):
- 입력 데이터를 모델에 넣으면, 모델이 출력값을 만듭니다.
- 이 출력값과 실제 값(정답) 사이의 차이를 손실(loss)이라고 한다. 이 차이를 손실 함수로 계산한다.
- 손실 계산:
- 모델의 예측이 틀리면 손실 값이 커진다. 손실 함수는 예측과 실제 값 사이의 차이를 정량적으로 계산한다.
- 역전파 (backward pass):
- 역전파는 모델의 출력에서 입력으로 거꾸로 이동하며, 각 가중치가 손실에 얼마나 영향을 주었는지 계산한다.
- 이를 통해 기울기(gradient)를 구한다. 기울기는 가중치를 얼마나 조정해야 손실이 줄어들지를 알려주는 정보이다.
- 가중치 업데이트:
- 역전파를 통해 계산된 기울기를 사용하여, 가중치를 업데이트한다. 이때 경사 하강법(gradient descent)이라는 알고리즘을 사용합니다.
- 가중치를 조정하여 손실이 줄어들도록 모델을 개선한다.
3. 비유로 설명
비유로 설명해보면, 역전파는 역전파는 안개가 낀 밤에 산을 내려가는 과정이라고 생각할 수 있다.
핵심 개념 연결: 손실 함수를 산의 높이, 기울기를 경사에 비유하여 역전파의 목표와 과정을 명확히 설명할 수 있다.
- 출발점: 우리는 산의 아무 곳에서나 시작할 수 있다. 이는 모델의 초기 가중치를 임의로 설정하는 것과 같다.
- 목표: 산의 가장 낮은 지점(손실이 최소인 지점)을 찾는 것이 목표
- 손실 함수: 산의 높이(손실)는 모델이 예측할 때 얼마나 틀렸는지를 나타낸다.
- 기울기(gradient): 산의 경사(기울기)는 현재 위치에서 어느 방향으로 내려가야 손실을 줄일 수 있는지를 알려준다
- 역전파: 이 경사를 따라 내려가면서, 가중치(모델의 파라미터)를 조정해 손실을 줄이는 것이 역전파 과정이다.
- 탐색: 산의 경사를 따라 가장 낮은 지점을 찾기 위해 여러 방향으로 이동해야 한다. 이는 모델의 가중치를 조금씩 변경하며 손실 함수 값을 계산하는 과정과 같다.
- 지역 최솟값: 가장 낮은 지점이라고 생각했던 곳이 실제로는 더 낮은 지점이 있는 골짜기의 한 부분일 수 있다. 이는 모델이 지역 최솟값에 빠져 전역 최솟값을 찾지 못하는 경우와 비슷하다.
- 학습률: 한 번에 얼마나 큰 걸음으로 내려갈지를 결정하는 것이 학습률. 학습률이 너무 크면 목표 지점을 넘어설 수 있고, 너무 작으면 학습이 너무 느려질 수 있다.
- 복잡성: 다차원 공간, 비선형성, 확률적 요소 등 역전파의 복잡성
- 불확실성: 최적의 해를 찾는 과정에서의 불확실성
- 탐색: 다양한 방향으로 탐색하며 최적해를 찾는 과정
손실 함수는 안개 속에서의 높이를 나타내고, 기울기는 현재 위치에서 가장 빠르게 내려갈 수 있는 방향을 알려준다. 우리는 나침반(기울기)을 이용하여 안개 속을 헤매며 가장 낮은 지점(최소 손실)을 찾아간다. 하지만 안개가 짙어서 항상 정확한 길을 찾을 수 있는 것은 아니고, 때로는 국지적인 웅덩이에 빠질 수도 있다.
4. PyTorch에서의 역전파
PyTorch에서는 backward() 함수를 통해 역전파를 수행하고 기울기를 자동으로 계산할 수 있다.
import torch
# requires_grad=True로 설정된 텐서
x = torch.tensor([2.0, 3.0], requires_grad=True)
# 연산 수행
y = x * 2 # y = [4.0, 6.0]
z = y.mean() # z = 평균 = (4.0 + 6.0) / 2 = 5.0
# 역전파 수행 (기울기 계산)
z.backward()
# x에 대한 기울기 출력
print(x.grad) # tensor([1., 1.])
- 순전파: y = x * 2, z = y.mean()은 모델의 예측을 나타내며, 그 결과 z는 5가 된다.
- 역전파: z.backward()를 호출하면 PyTorch는 출력(z)에서 입력(x)로 거꾸로 이동하면서, x에 대한 기울기를 계산한다.
- 기울기 계산 결과: x.grad는 [1., 1.]입니다. 이는 x가 1씩 변할 때 손실이 1만큼 변한다는 것을 의미한다.
5. 핵심 요점
- 역전파는 출력에서 입력으로 거꾸로 이동하면서 기울기를 계산하는 과정이다.
- 기울기는 모델의 가중치가 손실에 미치는 영향을 측정하며, 이를 사용해 가중치를 업데이트해 모델을 학습시킨다.
- PyTorch는 이 과정을 자동으로 처리해주며, 사용자는 requires_grad=True로 설정한 텐서와 backward() 함수만 사용하면 기울기를 쉽게 계산할 수 있다.
6. 경사하강법(Gradient Descent)
경사하강법은 역전파 과정의 일부로 사용되며, 역전파(backpropagation)를 통해 계산된 기울기(gradient)를 바탕으로 가중치를 업데이트하는 데 사용된다.
- 역전파로 기울기 계산: 역전파 과정에서 신경망의 각 가중치가 손실에 얼마나 영향을 미치는지를 계산하여 기울기(gradient)를 얻는다. 이때 기울기는 손실 함수가 최소가 되도록 가중치를 어떻게 변경해야 하는지 방향과 크기를 알려준다.
- 가중치 업데이트: 경사하강법은 이 기울기를 사용하여 가중치를 조정한다. 기울기의 반대 방향으로 가중치를 조금씩 이동시키는 방식으로 손실을 줄이려는 것이다.
즉, 역전파 과정에서 경사하강법을 통해 가중치를 업데이트하면서 손실을 줄이도록 학습을 진행한다.
과정 설명 예시
- 역전파는 기울기를 계산하는 과정
- 경사하강법은 그 계산된 기울기를 사용하여 가중치를 조정하는 최적화 과정
7. Tensorflow에서의 역전파
import tensorflow as tf
# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 필요한 라이브러리를 불러옵니다.
import numpy as np
import tensorflow as tf
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)
# 준비된 수술 환자 데이터를 불러들입니다.
Data_set = np.loadtxt("ThoraricSurgery.csv", delimiter=",")
# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
X = Data_set[:,0:17]
Y = Data_set[:,17]
# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 딥러닝을 실행합니다.
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)
이 코드에도 역전파가 포함되어 있다.
- Keras의 fit 함수는 모델을 학습할 때 내부적으로 역전파(backpropagation)를 수행하여 기울기(gradient)를 계산하고, 그 기울기를 바탕으로 경사하강법(여기서는 Adam 최적화 알고리즘)을 사용해 가중치를 업데이트한다.
- model.compile에서 optimizer='adam'을 지정한 부분이 바로 최적화 과정을 의미하며, Keras가 자동으로 역전파와 경사하강법을 수행해 모델의 가중치를 조정하도록 한다.
학습 과정
- 순전파: model.fit(X, Y, epochs=100, batch_size=10)에서 입력 데이터 X를 통해 예측값을 계산하고, 실제값 Y와의 오차를 측정
- 역전파: 오차를 바탕으로 각 층의 가중치에 대한 기울기를 계산
- 경사하강법(Adam): 역전파에서 계산된 기울기를 사용해 가중치를 업데이트
- 반복: 이 과정을 지정된 에포크(epochs=100) 동안 반복
따라서, Keras의 fit 함수는 자동으로 역전파를 수행하고, 사용자는 별도로 역전파를 신경 쓸 필요 없이 fit만 호출하면 된다.
'컴퓨터 공학, 전산학 > 인공지능,딥러닝' 카테고리의 다른 글
sklearn의 load_digits 데이터 분석과 classification 학습 (0) | 2024.10.06 |
---|---|
M1 맥에서 import torch 하기 (4) | 2024.10.04 |
캐글에서 데이터를 가져오기 (1) | 2024.09.30 |
fetch_california_housing 데이터로 선형 회귀 분석, R² 스코어 (5) | 2024.09.27 |
회귀 분석(LinearRegression model) (1) | 2024.09.27 |