어제 머신러닝에 이어 오늘은 딥러닝을 배워보았습니다.
오늘도 어제처럼 많은 내용을 정리하게 되지 않을까 싶습니다.
복습을 철저히 해야겠어요.
일단 먼저 머신러닝에서 배운 트리모델과 앙상블, 의사결정나무에 대해 정리하고 시작하겠습니다.
트리모델 (Tree Model)
데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리 기반의 규칙을 만드는 것
분류 기준값에 따라 몇 개의 소집단으로 나누는 과정
= 데이터를 어떤 기준 바탕으로 분류 기준값을 정의하는지가 알고리즘 성능에 큰 영향을 줌
결정트리 모델 (Decision Tree)
데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리 (Tree) 기반의 분류 규칙을 만드는 것
구조
1. 루트노드(Root) : 트리가 시작된 곳 (뿌리)
2. 규칙노드 : 규칙조건이 되는 곳
3. 리프노드 : 결정된 클래스 값
4. 서브트리 : 새로운 규칙 조건마다 생성
규칙이 많다는 것 = 좀 더 예측을 위한 학습이 잘 됨 + 복잡함 (과적합으로 이어질 수 있음)
= 가장 적은 노드로 높은 예측을 위해선 균일하게 데이터를 나누어 가져야 함
+ 가지치기 (Pruning) : 오버피팅을 막기 위한 전략, 나무에 가지 치는 작업
= 최대 깊이, 터미널 노드의 최대 개수, 한 노드가 분할하기 위한 최소 데이터 수 등 제한하는 것
불순도(Impurity)
해당 범주 안에 서로 다른 데이터가 얼마나 섞여 있는지 뜻함
ex) 왼쪽에 빨간공 8개 파란공 2개, 오른쪽에 빨간공 6개 파란공 4개일 경우
= 왼쪽은 불순도가 낮고, 오른쪽은 불순도가 높음 = 왼쪽은 순도가 높고, 오른쪽은 순도가 낮음
+ 불순도 수치화 → 엔트로피(Entropy), 지니계수(Gini Index)
+ 엔트로피(Entropy) : 불순도를 측정하는 지표로서, 정보량의 기댓값 (정보량 : 어떤 사건이 가지고 있는 정보의 양을 의미)
정보 이론에서 정보의 불확실함의 정도를 나타내는 양
데이터를 잘 구분할 수 없을 수록 엔트로피는 커짐
정보 이득의 최대화 → 불순도의 감소 → 엔트로피의 감소
+ 지니 지수(Gini Index) : 0에서 1 사이의 값을 가짐
불평등의 정도를 나타내는 통계학적 지수
데이터가 비슷하게 있을 수록 지니 지수는 높아짐
정보 이득의 최대화 → 불순도의 감소 → 지니 지수 감소
= 0이면 해당 데이터 집합에서 모든 데이터가 동일한 클래스로 구성되어 있음
= 1이면 해당 데이터 집합에서 모든 데이터가 서로 다른 클래스로 구성되어 있음
정보 이득의 최대화 → 불순도의 감소 → 지니 지수의 감소
의사 결정 나무 (Decision Tree)
1. 분류와 회귀가 모두 가능한 머신러닝 알고리즘
2. 질문을 던져서 맞고 틀리는 것에 따라 대상을 좁혀나감 (예를 들어 스무고개 놀이)
3. Random forest의 기본 구성 요소
+ 의사 결정 나무 형성 단계
1. 분리규칙
2. 정지규칙
3. 가지치기
4. 예측값 할당
랜덤 포레스트 (Random Forest)
앙상블 학습 방법론을 사용한 결정 트리의 확장 버전
여러 개의 결정 트리를 학습시키고, 그 결과를 집계해 최종 예측 결과를 도출하는 방식으로 작동
= 결정 트리의 과적합 문제를 완화하는 데 도움을 줌
단일 결정 트리는 학습 데이터에 대한 과적합 문제가 존재하지만, 랜덤 포레스트는 여러 개의 결정 트리의 예측을 집계함
앙상블 학습 유형
보팅(Voting)
= 하드 보팅 (Hard voting) : 각 weak learner들의 예측 결괏값을 바탕으로 다수결 투표하는 방식
= 소프트 보팅 (Soft voting) : weak learner들의 예측 확률값의 평균 또는 가중치 합을 사용
배깅(Bagging) : Bootstrap Aggregating의 약자, 이름에서 알 수 있다시피 부트스트랩(Boostrap) 을 이용
부트스트랩이란 주어진 데이터셋에서 random sampling 하여 새로운 데이터셋을 만들어내는 것을 의미
부트스트랩을 통해 만들어진 여러 데이터셋을 바탕으로 weak learner를 훈련시킨 뒤, 결과를 voting
부스팅(Boosting) : 반복적으로 모델을 업데이트, 이 때 이전 iteration의 결과에 따라 데이터셋 샘플에 대한 가중치를 부여함
결과적으로, 반복할 때마다 각 샘플의 중요도에 따라 다른 분류기가 만들어지게 됨, 최종적으로는 모든 iteration에서 생성된 모델의 결과를 voting
+ 스태킹 (Stacking) : weak learner들의 예측 결과를 바탕으로 meta learner로 학습시켜 최종 예측값을 결정하는 것
meta learner 또한 학습이 필요하며, 이때 사용되는 데이터는 training data에 대한 각 weak learner들의 예측 확률값의 모음
과적합 방지를 위해 주로 k-fold cross validation을 이용
까지 정리하고 딥러닝을 이어서 작성해 보도록 하겠습니다 :)
딥러닝 (Deep Learning)
머신 러닝(Machine Learning)의 특정한 한 분야
= 인공 신경망(Artificial Neural Network, ANN)의 층을 연속적으로 깊게 쌓아 올려 데이터를 학습하는 방식
인공신경망(Artificial Neural Network, ANN)
생물학적 두뇌의 뉴런을 기반으로 모델링 된 네트워크
인공뉴런은 노드(node)라고 하며, 여러 레이어로 클러스터화 되고 병렬로 작동
인공뉴런은 숫자로 된 신호를 수신하면 이를 처리하고 해당 뉴런과 연결된 다른 뉴런에 신호를 보냄
= 사람의 뇌와 마찬가지로, 신경 강화를 통해 패턴 인식, 전문지식, 전반적인 학습을 개선
+ ANN의 문제점
1. 학습과정에서 파라미터의 최적값을 찾기 어려움
2.Overfitting에 따른 문제 : 사전훈련을 통해 방지 가능
3. 학습 시간이 너무 느림 : 그래픽카드 발전으로 많은 연산량 감당 가능
+ 딥(deep)이란 표현을 쓰는 이유
신경계에는 엄청난 수의 뉴런이 포함되어 있고, 서로 매우 복잡한 구조로 얽혀 거대한 망을 구성
= 이를 신경망이라 함
머신러닝 과학자들은 신경망의 구조에 착안하여 퍼셉트론을 하나의 빌딩 블록 (Building block)이라 생각
= 여러 개의 퍼셉트론을 연결하여 인공 신경망이라는 개념을 고안함
따라서 딥(deep) 이란, 연결된 구조로 만들어진 층(layer)에서 표현을 학습한다는 개념을 의미함
딥러닝과 머신러닝의 차이
1. 머신러닝은 주어진 데이터를 인간이 먼저 처리
2. 사람이 먼저 컴퓨터에서 특징을 추출해 데이터를 정제하여 훈련할 수 있는 상태로, 컴퓨터가 학습할 수 있도록 만들어 주어야 함
3. 반면 딥러닝은 머신러닝에서 사람이 하던 패턴 추출 작업이 생략
4. 컴퓨터 스스로 학습할 수 있도록 신경망을 컴퓨터에게 주고 경험을 통해 학습할 수 있음
+ 딥러닝 활용 예시
1. 이미지 및 비디오 처리 : 객체 인식, 얼굴 인식, 의료 이미징
2. 자연어 처리 : 기계 번역, 음석 인식 및 합성, 감정 분석
3. 게임 및 엔터테인먼트 : 게임 AI, 애니메이션 생성
4. 의료 분야 : 질병 예측 및 진단, 약물 연구
5. 금융 : 주가 예측, 사기 탐지
6. 자율주행 자동차 : 경로 계획 및 주행
7. 에너지 관리 : 수요 예측
심층신경망 (Deep Neural Network, DNN)
내부 작업의 어떤 이해 없이 입력과 결과의 측면으로 볼 수 있는 시스템
모델 내 은닉층을 많이 늘려서 학습의 결과를 향상하는 방법
= 은닉층을 2개 이상 지닌 학습 방법을 뜻함
컴퓨터가 스스로 분류 레이블을 만들어 내고 공간을 왜곡하고 데이터를 구분 짓는 과정을 반복 : 최적의 구번선을 도출
= DNN을 응용한 알고리즘이 바로 CNN, RNN 이 외에 LSTM, GRU 등 있음
+ 딥러닝에서 블랙박스 현상이 생기는 이유
= 딥러닝에서의 히든레이어(Hidden layer)를 분석하는 것이 너무 어렵기 때문
실제로 각 레이어의 노드들은 간단히 표현하면 모두 f(x) : y = wx+b 라는 수식으로만 정의
그리고 한 노드는 이전 레이어에서 올라온 입력 값들을 무수히 많이 계산하고 합하게 되어 ΣF(x) = Σwx+b 라는 수식으로 표현할 수 있음
= 히든레이더 안에는 수많은 히든 노드들이 수 많이 엉켜서 복잡하게 쌓여 있는 게 일반적
입력값(입력노드) = 값을 계산하는 뉴런 시스템의 상호연결로 표현되고 적응함으로써 패턴인식과 같은 기계학습을 수행
입력 뉴런의 집합으로 신경망은 정의 : 입력된 데이터에 의해 활성화되고 히든 노드 내에서 함수의 변형과 가중치가 적용된 후, 해당 뉴런의 활성화는 다른 뉴런으로 전달
이러한 처리는 마지막 출력 뉴런이 활성화될 때까지 반복 = 출력노드로 도출시킴
합성곱신경망 (Convolution Neural Network, CNN)
데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조
Convolution과정과 Pooling과정을 통해 진행
Convolution : 데이터에 각 성분의 인접 성분을 조사해 특징을 파악하고 파악한 특징을 한 장으로 도출시키는 과정
도출된 장 : Convolution Layer
= 하나의 압축과정으로 파라미터의 개수를 효과적으로 줄여주는 역할
Pooling : Convolution 과정을 거친 레이어의 사이즈를 줄여주는 과정
= 데이터의 사이즈를 줄이고 노이즈를 상쇄시켜 미세한 부분에서 일관적인 특징을 제공
Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 만듦
순환신경망 (Recurrent Neural Network, RNN)
반복적이고 순차적인 데이터(Sequential data) 학습에 특화된 인공신경망의 한 종류로써 내부의 순환구조가 특징
순환구조를 이용하여 과거의 학습을 Weight를 통해 현재 학습에 반영
입력과 출력을 시퀀스 단위로 처리
은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀이라 함
이 셀은 이전의 값을 기억하려고 하는 일종의 메모리 역할을 수해하므로 메모리 셀이라 부름
은닉층의 메모리 셀에서 나온 값이 다음 은닉층의 메모리 셀에 입력 : 은닉상태
1. 일 대 다 (one-to-many)
하나의 입력에 대해 여러 개의 출력을 가지는 일 대 다 모델
= 이미지 캡셔닝에 사용
2. 다 대 일 (many-to-one)
시퀀스 입력에 대해서 하나의 출력을 하는 다 대 일 모델
입력 문서가 긍정적인지 부정적인지 판별하는 감성 분류, 정상 메일인지 스팸 메일인지 분류하는 스팸 메일 분류에 사용
3. 다 대 다 (many-to-many)
시퀀스 입력에 대해 시퀀스 출력을 하는 다 대 다 모델의 경우 챗봇이나 번역기에 쓰임
개체명 인식이나 품사 태깅과 같은 작업 또한 다 대 다 모델
+ 딥러닝 프로세스
1. 환경 준비
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
2. 데이터 준비
MNIST 데이터셋을 로드하고 훈련 세트와 검증 세트로 분할
입력 데이터를 정규화하여 0과 1 사이의 값으로 변환
= train_test_split과 같이 데이터를 import 하고 분리
= MNIST 데이터셋은 0에서 9까지 10가지로 분류될 수 있는 손글씨 숫자 이미지 70,000개로 이루어짐
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train의 경우 여러 가지의 픽셀단위 데이터 정보값, 그것에 대한 결과(0~9의 숫자)는 y_train에 있다고 생각하면 됨
(255로 나누는 이유 : 안정적인 학습, 빠른 학습, 계산 문제 방지, 더 좋은 결과)
3. 모델 구성
Sequential 이란 딥러닝 모델을 생성 (선언)
Flatten은 28 * 28로 되어있는 input data가 들어온다는 것을 암시
두 번째는 128개의 은닉층으로 되어있는 하나의 층을 만들 것
타깃이 10개의 숫자이기 때문에 마지막은 타깃의 개수로 마무리
(추가적으로 고려할 것 : 몇 개의 층으로 만들지? Dense라는 함수 안에 숫자와 설정은 어떻게 할지?)
model = Sequential([ # Sequential : 모델 생성
Flatten(input_shape=(28, 28)), # Flatten : 레이어
Dense(128, activation='relu'), # Dense : 레이어 (은닉 레이어)
Dense(10, activation='softmax') # Dense : 레이어 (출력 레이어)
])
model.compile(optimizer='adam', # 모델 컴파일, optimizer : 경사 하강법 기반의 최적화 방법
loss='sparse_categorical_crossentropy', # loss : 손실 함수
metrics=['accuracy']) # metrics : 훈련 중에 추적할 메트릭을 지정
4. 모델 실행
모델을 훈련 데이터에 대해 훈련하고 검증 데이터로 검증
history = model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test)) # history : 반환값, 훈련 중에 발생한 여러 사항을 담고 있는 객체
# x_train, y_train : 훈련 데이터셋의 입력 x 및 레이블 y
# epochs : 전체 훈련 데이터셋에 대해 반복할 에폭 수
# validation_data : 검증 데이터셋의 입력 및 레이블, 모델의 성능을 평가하는 데 사용
+ Epoch (에포크) : 전체 데이터셋을 얼마나 많이 사용하여 학습할지 결정
+ Batch Size (배치 크기) : 한 번에 얼마나 많은 데이터를 사용하여 모델을 업데이트할지 결정
5. 결과 확인
훈련과 검증의 정확도와 손실을 확인
10개의 분류로 잘 배정되었는지를 확인해야 하기 때문에 accuracy와 val_accuracy를 활용하여 검증 데이터를 잘 예측하는지도 파악
import matplotlib.pyplot as plt
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.show()
# 결과 시각화 정리
import numpy as np
# 테스트 데이터를 사용하여 예측 수행
predictions = model.predict(x_test)
def display_prediction(index, predictions_array, true_label, img):
plt.figure(figsize=(6,3))
# 이미지 출력
plt.subplot(1, 2, 1)
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img[index], cmap=plt.cm.binary)
# 예측 결과 출력
predicted_label = np.argmax(predictions_array[index])
if predicted_label == true_label[index]:
color = 'blue'
else:
color = 'red'
plt.xlabel("{} {:2.0f}% ({})".format(predicted_label,
100*np.max(predictions_array[index]),
true_label[index]),
color=color)
# 예측 확률 막대그래프 출력
plt.subplot(1, 2, 2)
plt.bar(range(10), predictions_array[index], color="#777777")
plt.ylim([0, 1])
plt.xticks(range(10))
plt.ylabel('Prediction Probability')
plt.xlabel('Predicted Value')
plt.tight_layout()
plt.show()
# 첫 번째 예측 결과 시각화
display_prediction(100, predictions, y_test, x_test)
# 두 번째 예측 결과 시각화 (실제로 코드를 실행할 수 있다면 이 부분을 주석 해제하여 실행)
# display_prediction(1, predictions, y_test, x_test)
최소 제곱법 (Least Square Method)
ex) 2시간 : 80점 / 4시간 : 90점 / 6시간 : 88점 / 8시간 : 92점
# 가진 정보값 x(공부시간)과 y(성적) 일 때 이를 이용해 기울기 a에 대한 그림처럼 기울기의 값을 구함
a = (x - x평균)(y-y평균)의 합 / (x-x평균) ** 2의 합
공부한 시간(x) 평균 = 2, 4, 6, 8 → 5
성적(y) 평균 = 80, 90 , 88, 92 → 87.5
a = (2-5)(80-87.5) …… (8-5)(92 - 87.5) / (2-5) ** 2 …. (8-5) ** 2
a = 34 / 20 ⇒ 1.7
b = y의 평균 - (x의 평균 * a) # b는 오차를 반영한 절편을 의미함
b = 87.5 - (5*1.7) ⇒ 79
y = 1.7x + 79
79(b, 절편) # 아무런 공부를 하지 않아도 79점은 맞을 수 있다는 뜻 == 가장 기본값
평균 제곱 오차 (Mean Squared Error, MSE)
모델이 얼마나 잘 맞는지에 대한 정량적인 척도를 제공
MSE가 0에 가까울수록 모델의 예측이 실제 값에 가깝다는 것을 의미
+ MSE 산출 공식
# 예측된 점수를 계산합니다
예측된_점수 = [m_least_squares * t + b_least_squares for t in 시간]
# 평균 제곱 오차를 계산합니다
MSE = sum((y_pred - y_true)**2 for y_pred, y_true in zip(예측된_점수, 점수)) / n
MSE
다중 선형 회귀 (Multiple Linear Regression, MLR)
독립변수 X의 변화에 따른 종속변수 y의 변화를 선으로서 예측하는 기법
독립변수 X가 여러 개인 분석기법 = 독립변수 X가 여러 개 == 특성(feature)이 여러 개라는 뜻
+ MLR을 사용할 때 필요한 가정
1. 각각의 독립 변수는 종속 변수와의 선형 관계가 존재 (y=Wixiy=Wixi 그래프를 그렸을 때 직선의 형태)
2. 독립 변수 사이에서는 높은 수준의 상관관계가 존재하지 않아야 함, 만약 그렇지 않다면 관계를 분석하기가 어려움
3. 추정된 종속 변수의 값과 실제 관찰된 종속 변수의 값과의 차이, 즉 잔차(residual)가 정규 분포를 이루어야 함
교차 엔트로피 오차(Cross-Entropy Loss)
분류 문제에서 주로 사용되는 손실 함수
= 교차 엔트로피는 실제 분포와 예측 분포 사이의 차이를 측정하는 방법
L(y,p)=ylog(p)−(1−y)log(1−p)
# y는 실제 라벨 (0 또는 1)
# p는 모델이 예측한 확률
1. 실제 라벨이 1일 때 : −ylog(p)만 고려
−ylog(p)
2. 실제 라벨이 0일 때 : −(1−y)log(1−p)만 고려
−(1−y)log(1−p)
y=1 (즉, 실제 라벨이 1인 경우)와 y=0 (즉, 실제 라벨이 0인 경우)에 대한 교차 엔트로피 오차를 나타내는 그래프
실제 라벨 y가 1 : 예측 확률 p가 1에 가까울수록 교차 엔트로피 오차는 0에 가까워짐, 반대로 p가 0에 가까울수록 오차는 무한대로 증가
실제 라벨 y가 0 : 예측 확률 p가 0에 가까울수록 교차 엔트로피 오차는 0에 가까워짐, 반대로 p가 1에 가까울수록 오차는 무한대로 증가
1. 합성곱 (Convolution Layer) : 현재 위치의 출력 데이터는 인접한 Pixel에 Convolution Filter을 곱해서 얻어진 값
2. 스트라이드 (Stride) : 임의의 필터가 데이터에 적용되어 계산 됨, 필터가 데이터에서 한 칸씩 또는 두 칸씩 이동하며 계산될 때 값을 뜻함
= 이를 통해 feature map 생성
3. 패딩 (Padding) : 합성곱 계층을 거치며 이미지 크기가 점점 작아지게 되고 가장자리에 위치한 픽셀의 정보는 점점 사라지는 문제를 해결
이미지의 가장자리에 특정값으로 설정된 픽셀들을 추가함으로 입력 이미지와 출력이미지의 크기를 같거나 비슷하게 만드는 역할을 수행
4. 풀링 계층 (Pooling Layer) : 컨볼루션 레이어의 출력 데이터를 받아서 출력 데이터 (Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용
+ Pooling Layer와 Convolution Layer
1. 학습 대상 파라미터가 없음
2. Pooling 레이어를 통과하면 행렬의 크기 감소
3. Pooling 레이어를 통해 채널 수 변경 없음
퍼셉트론 (Perceptron)
다수의 입력으로부터 하나의 결과를 내보내는 알고리즘 = 입, 출력을 갖춘 알고리즘 (입력을 주면 정해진 규칙에 따른 값을 출력)
퍼셉트론에서는 가중치와 편향을 매개변수로 설정 (AND, OR 게이트 등의 논리 회로를 표현 가능)
(단, XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음 / 2층 퍼셉트론을 이용하면 표현 가능)
단층 퍼셉트론은 직선의 영역만, 다층 퍼셉트론은 비선형의 영역도 표현 가능
신경 세포 뉴런의 입력 신호와 출력 신호가 퍼셉트론에서 각각 입력값과 출력값에 해당
x는 입력값, w는 가중치(Weight), y는 출력값 / 그림 안의 원은 인공 뉴런에 해당
단층 퍼셉트론 (Single-Layer Perceptron, SLP)
값을 보내는 단계과 값을 받아서 출력하는 두 단계로만 이루어짐
각 단계를 보통 층(layer)이라고 부름, 두 개의 층은 입력층(input layer)과 출력층(output layer)
컴퓨터는 두 개의 값 0과 1을 입력해 하나의 값을 출력하는 회로가 모여 만들어짐, 이 회로는 게이트(gate)라 불림
아래 그림의 원을 뉴런 혹은 노드라 부름, 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해짐
= 가중치가 클 수록 해당 신호가 그만큼 더 중요함을 나타냄
세타(θ)를 -b로 치환, b를 편향(bias)이라 하며 w1과 w2는 그대로 가중치
더 간결한 형태 : 조건 분기의 동작을 하나의 함수, 함수를 h(x)라 하면 이는 계단 함수(step function)의 형태
다층 퍼셉트론 (Multi-layer Perceptron, MLP)
단층 퍼셉트론은 입력층과 출력층만 존재하지만, 다층 퍼셉트론은 중간에 은닉층(hidden layer)이라 불리는 층을 더 추가 함
층을 여러겹으로 쌓아가면서 선형 분류만으로 풀지 못한 문제를 비선형적으로 풀 수 있게 됨
= 각 층의 오차는 역전파 알고리즘을 통해 업데이트
+ 다층 퍼셉트론은 은닉층이 1개 이상인 퍼셉트론을 의미
+ 은닉층이 2개 이상인 신경망 : 심층신경망 (Deep Neural Network, DNN)
복잡한 문제를 해결을 위해선 층수를 여러 층 쌓은 모델 이용, 깊은 층수를 쌓을 경우
= 역전파(Backpropagtion) 학습과정에서 데이터가 사라져 학습이 잘 안 될 수 있음 (Vanishing Gradient)
경사하강법 (Gradient Descent)
함수의 값이 낮아지는 방향으로 각 독립변수들의 값을 변형시키며 함수가 최솟값을 갖도록 하는 독립변수의 값을 탐색 방법을 의미
= 일반적으로 입력된 Parameter의 검증(Validation)이 필요할 때 사용
함수의 기울기(즉, gradient)를 이용해 x의 값을 어디로 옮겼을 때 함수가 최소값을 찾는지 알아보는 방법
= 기울기가 양수라는 것은 x값이 커질 수록 함수 값이 커진다는 것, 기울기가 음수라면 값이 커질 수록 함수의 값이 작아진다는 것
= 기울기 값이 크다는 가파르다는 것을 의미함, x의 위치가 최솟값과 최댓값에 해당하는 x좌표로부터 멀리 떨어져있음을 의미
오차역전파 (Backpropagation)
오차(error)를 거꾸로 전파(backpropagation)하는 방법
(오차란 모델의 예측값과 실제값의 차이, 결과에 영향을 많이 미친 노드(뉴런)에 더 많은 오차를 돌려줌)
한 번 돌리는 것을 1 epoch 주기, epoch를 늘릴수록 가중치가 계속 업데이트(학습) 되면서 점점 오차가 줄어가는 방법
위 그림을 참고하면 Output layer에서 나온 결과 값이 가진 오차가 0.6
이전 노드(뉴런에서) Output layer에 각각 3, 2라는 값을 전달
= Ouput의 Error에 위 노드는 60%, 아래 노드는 40% 영향을 주었음
error 0.6을 0.6, 0.4를 곱하니 위 노드에는 error가 0.36이, 아래 노드에는 0.24 전달
+ 오차역전파 작동 원리
1. 순전파 (Forward Pass) : 입력 데이터를 신경망의 입력층에서 출력층까지 전달하면서 각 층의 출력을 계산
2. 비용 함수 계산 : 신경망의 최종 출력과 실제 타깃 값 사이의 오차를 계산하는 비용 함수를 사용
3. 역전파 (Backward Pass) : 출력층에서 입력층 방향으로 오차를 역으로 전파하면서 각 가중치에 대한 비용 함수의 그래디언트를 계산
(출력층의 오차를 계산, 각 은닉층에서 그래디언트를 계산하고 이를 이용해 이전 층의 오차를 계산, 각 가중치에 대한 그래디언트를 찾기 위해 연쇄 법칙을 사용)
4. 가중치 업데이트 : 계산된 그래디언트를 사용하여 경사 하강법을 적용 후 신경망의 가중치를 업데이트
+ 연쇄 법칙 : 오차역전파는 연쇄 법칙을 기반으로 함, 각 층에서 이전 층의 그래디언트를 계산하는 데 사용
+ 활성화 함수와 그 미분 : 각 층의 활성화 함수와 그 미분은 그래디언트 계산에 중요
+ 장점 : 신경망의 깊이와 구조에 관계없이 그래디언트를 효율적으로 계산할 수 있음
+ 한계 : 오차역전파는 미분 가능한 활성화 함수에만 적용할 수 있음 (일부 비선형 함수에서는 문제가 발생할 수 있음)
으로 정리를 마쳐보겠습니다.
아직 헷갈리는 부분들이 많지만 ADSP를 공부하며 배웠던 부분들도 있어서 재밌게 진행할 수 있었습니다.
이제 약 한달 뒤에 ADSP시험이 있는데 관련해서 공부하고 이론 정리도 같이 올려보도록 하겠습니다.
관련 파일이 궁금하시다면 밑에 링크로 들어가셔서 참고하세요 :)
https://github.com/soohyun020812/ormcamp
GitHub - soohyun020812/ormcamp: 오름캠프 교육에서 활용한 실습 내용들 정리
오름캠프 교육에서 활용한 실습 내용들 정리. Contribute to soohyun020812/ormcamp development by creating an account on GitHub.
github.com