13주차 1일차 딥러닝
👨💼용어정리
✅ 머신러닝과 딥러닝의 차이
📝 머신러닝: 인간이 직접 특징을 도출할 수 있게 설계하여, 예측값 출력
📝 딥러닝: 인공 지능 스스로 일정 범주(비정형 : 이미지, 영상, 텍스트,음성)의 데이터를 바탕으로
공통된 특징을 도출하고, 그 특징으로 예측값 출력
=> 사람 같지만 보다 빠른 학습속도, 원하는 빅데이터를 학습 후 활용가능
✅ 앞으로 배울 딥러닝 내용들
📝 기본 네트워크에 대한 동작 방식
📝 심층신경망(DNN, Fully Connected Network, Densely Connected Network)
📝 합성곱신경망(CNN, Convolutional Neural Network) => 이미지, 텍스트 다 사용가능. 주로 이미지 분류
📝 순환신경망(RNN,Recurrent Neural Network) => 순서 데이터, 시계열 데이터, 자연어 처리 등에 주로 사용
=> 입력과 출력을 시퀀스 단위로 처리하는 시퀀스(Sequence) 모델
✅ 딥러닝의 학습과정
📝 출력값과 실제값을 비교 ->그 차이를 최소화하는 가중치(𝒲)와 편향의 조합 찾기
📝 가중치는 오차를 최소화하는 방향으로 모델이 스스로 탐색(역전파)
📝 오차계산은 실제 데이터를 비교 . 손실함수(모델의 정확도 평가시 오차를 구하는 수식)를 최소화하는 값 탐색
📝 알맞은 손실함수를 찾아 최소화하기 위해 고안된 방법이 경사하강법이며, 옵티마이저로 경사하강법을 원리를 이용
🔥 요즘엔 트랜스포머 신경망 모델!!!
✅ AI 겨울(AI Winter)
📝 인공 신경망 자체는 꽤 오랫동안 존재해 왔고, CNN or RNN같은 신경망 모델도 80년대에 활발히 연구된 주제
=> 하지만 컴퓨터의 연산성능으로는 쓸만한 모델 구현 불가(*ANN의 문제점 지속)
=> 또한 방대한 데이터의 수집 어려움. 십수년 동안 이론적인 방법으로만 여겨짐
*ANN의 문제점
🔸 학습 데이터에 따른 과적합 문제 → ‘사전훈련’을 통해 해결
✅ 퍼셉트론
📝인공 신경망의 한 종류.
📝가장 간단한 형태의 순방향 신경망 네트워크 선형분류기
✅ 순전파 (Forward Propagation)
📝 인공 신경망에서 입력층 -> 출력층 방향으로 예측값의 연산이 진행되는 과정
📝 입력값은 입력층, 은닉층을 지남-> 가중치와 함께 연산 -> 출력층에서 모든 연산을 마친 예측값 도출
✅ 역전파(Backpropagation)
📝 순전파와 반대로 출력층 -> 입력층 방향으로 계산하면서 각 뉴런의 가중치를 업데이트(조정)
역방향으로 오차 전파 및 감소
📝 역전파 == 오차 역전파법 == 오류 역전파 알고리즘
📝 출력층에서 제시한 값이 실제 원하는 값에 가까워지도록 학습 -> 통계적 방법에 의한 *오차 역전법을 사용
*오차 역전법
🔸 동일 입력층에 대해 원하는 값이 출력되도록 각각의 가중치를 조정하는 방법
🔸 속도는 느리지만, 안정적인 결과를 얻을 수 있는 장점이 있어 기계 학습에 널리 사용
✅ 활성화 함수 (Activation function)
📝 인공신경망 내부에서 입력값을 근거로 출력할 값을 결정하는 기능 수행
📝입력값이 가중치와 곱해진 후에, 활성화 함수를 거쳐 다음 레이어에 전달
📝 신경망을 구성할 때 설정, 각각의 레이어를 정의 시 아래와 같은 세부 함수 선택
📝 sigmoid(시그모이드): 0~1 사이의 값. *기울기 소실 문제 발생!
📝 tanh(하이퍼볼릭탄젠트): 탄젠트 함수를 옆으로 눕힌 모양. 시그모이드에 비해 속도가 빠름. -1 ~ 1사이의 값
*기울기 소실 문제 발생!
📝 ReLU(렐루): 기울기 소실 문제를 해결…하나 싶었지만 그래도 기울기가 0인 지점이 있음
📝 Leaky ReLU(리키 렐루): 렐루(ReLu)의 기울기 소실 문제를 해결하기 위해 나온 ReLU의 변형 함수
* 기울기 소실 문제
🔸깊은 인공 신경망을 학습할 때 역전파 과정에서 입력층으로 갈수록 기울기(Gradient)가 점차 작아지는 현상
=> ANN 신경망의 문제점으로 대두
🔸 입력층에 가까운 층들에서 가중치들이 업데이트가 제대로 되지 않으면 결국 최적의 모델을 찾을 수 없게 됨
🔸 신경망의 활성함수의 도함수 값이 계속 곱해지다 보면 가중치에 따른 결과값의 기울기가 0이 되어 버려서, 경사 하강법을 이용할 수 없게 되는 문제이다.
✅ 손실함수(Loss function)
📝 손실함수는 실제값과 예측값의 차이를 수치화해주는 함수
=> 오차가 작다 == 손실 함수가 작다
📝 손실 함수 J(W)가 2차 함수와 같이 볼록 함수의 형태라면 미분으로 손실이 가장 작은 가중치(W* )를 찾을 수 있음
✅ 최적화 함수(Optimizer)
📝 손실함수를 최소화하는 방향으로 가중치를 갱신하는 알고리즘 (무슨 경사하강법 사용할거니?)
📝 보통 Adam을 사용
✅ flatten()
📝 DNN에서 2차원 데이터는 신경망에 주입 불가능 → .flatten()을 활용해 1차원 형태
📝 2차원 이미지를 그대로 넣을 수 있게 만든 것. CNN (합성곱신경망)
=>합성곱 신경망에서도 특징을 추출하고 뒤에서는 DNN(FCN)을 사용
✅ Model architecture
📝 모델이 얼마나 잘 예측했는지에 대한 실제값과 예측값을 계산 → loss
📝 회귀: Square Loss
💡 회귀 모델에서 loss 측정 시 Absolute Error 보다 Squre Loss를 사용하는 이유
=> 절대 오차(Absolute Error)는 제곱 오차와 달리 제곱이 없으므로 미분이 불가능
=> 또한 절대 오차는 오차의 크기에 대해 일정한 패널티를 부여하므로 작은 오차와 큰 오차가 동일한 영향력을 가질 수 있습니다. (chatGPT)
📝 분류: Cross Entropy Loss
📝 y = (a*weight)+ bias 에서 초기 weight 값은 무엇인가? : 초기 weight는 랜덤값을 넣어준다.
✅ Softmax함수
📝 소프트맥스(softmax)는 딥러닝에서 출력층의 활성화 함수로 자주 사용되는 함수 중 하나
=> 출력값을 입력으로 받아 각 클래스에 속할 확률을 계산하는 함수
📝 출력층의 각 뉴런이 해당 클래스에 속할 확률을 출력하므로-> 분류 문제에서 주로 사용
📝 소프트맥스 함수를 사용하면 다중 클래스 분류 문제 다루기 가능. 각 클래스에 대한 확률값을 출력
✅ Sigmoid와 softmax 비교
📝 Sigmoid
입력 데이터를 0과 1 사이의 값으로 출력하는 미분가능한 연속성을 가진 함수
Gradient Vanishing 현상이 발생할 우려▲
📝 Softmax
다중 분류 예제에서 주로 사용하는 함수
분류할 클래스 개수만큼 차원 벡터를 입력받아 각 클래스에 속할 확률값을 Output으로 출력
입력값을 0~1 사이의 값으로 모두 정규화하고, 출력 값 총합계가 1이 되도록 하는 함수
📌📌📌
✅ 신경망이 너무 촘촘하면 생기는 문제
📝 과적합 → dropout으로 해결
✅ 딥러닝의 하이퍼파라미터
📝 은닉층의 개수, 한 층에서 노드의 개수 등
✅ y_train값에 따른 손실함수
📝 ordinal 형태: sparse_categorical_crossentropy
📝 onehot 형태: categorical_crossentropy
📝 binary 형태: binary_crossentropy
✅ 딥러닝 돌릴 때 주의할 점
📝 다른 데이터에 적용한다면 층 구성을 어떻게 할것인가?
=>입력-은닉-출력층으로 구성
📝 예측하고자 하는 값이 분류(이진, 멀티클래스), 회귀인지에 따라 출력층 구성, loss 설정 상이
📝 분류, 회귀에 따라 측정 지표 정하기
📝 활성화함수는 relu & 옵티마이저 로는 adam 을 사용
=> baseline 정도의 스코어가 나옵니다.
📝 fit 을 할 때 epoch 를 통해 여러 번 학습을 진행하는데 이 때, epoch 수▲
=> 대체적으로 좋은 성능을 내지만 Overfitting 가능성▲
=> epoch 수 ▼ Underfitting 가능성▲
✅ 데이터 종류에 따른 최적의 학습 방법
📝 딥러닝 - 비정형데이터
📝 부스팅모델 - 정형데이터
✅ loss, accuracy와 val_loss, val_accuracy의 차이
📝 loss, accuracy는 train set으로 val_loss, val_accuracy는 validation set으로 계산한 것
✅ 딥러닝 모델의 성능 개선하기
📝 레이어 변경하기
📝 Dropout 사용하기
📝 early_stop 값 조정하기
📝 epoch 조정하기
📝 learning_rate 조정하기
📝 batch 사용하기
✅ 딥러닝 서적
📝 https://udlbook.github.io/udlbook/