딥러닝 기초
기초 수학
일차 함수, 기울기와 y 절편
일차 함수
y=ax+b(a=0)
a: 기울기
b: 절편
이차함수와 최솟값
이차 함수
y=ax2+bx+c(a=0)
a>0 이면 아래로 볼록
a<0 이면 위로 볼록
y=ax2의 그래프 평행이동
- x축으로 p만큼, y축으로 q만큼 평행이동
y=a(x−p)2+q(a=0)
- 점 p와 q를 꼭짓점으로 하는 포물선
- 꼭짓점은 이차함수의 최솟값이 됨
미분, 순간 변화율과 기울기
미분
- 어떤 함수의 정의역 속 각 점에서 함수값의 변화량과 독립 변수값의 변화량 비의 극한
- 입력 변수의 변화가 함수 출력 값을 변화시키는 정도를 나타냄
- 함수의 기울기
딥러닝을 이해하는데 중요한 개념
- 딥러닝은 일차함수의 a(가중치)와 b(편향) 값을 구하는 것
- a와 b의 값은 이차함수 포물선의 최솟값을 구하는 것과 동일
- 최솟값을 미분으로 구하기 때문에 중요
미분
- 순간 변화율 (=미분계수)
- 어느 한 점에서의 접선의 기울기
- 기울기가 0인 접선
편미분
- 여러가지 변수가 식 안에 있을때, 모든 변수를 미분하는 것이 아니라 우리가 원하는 한가지 변수만 미분하고 그 외에는 모두 상수 취급
- 파라미터들은 보통 여러 차원으로 이루어진 벡터 형태여서 여러 변수를 고려하는 상황이라 편미분 필요
인공신경망
뉴럴 네트워크의 개념
뉴럴 네트워크
퍼셉트론
- 가장 간단한 인공 신경망 구조 중 하나
- 입력과 출력이 숫자, 각각의 입력 연결은 가중치와 연관되어 있음
- 입력의 가중치 합을 계산한 다음, 계산된 합에 계단 함수를 적용해 결과 출력
- 입력뉴런: 퍼셉트론의 입력으로 어떤 입력이 주입되든 출력으로 통과시킴
- 편향 뉴런: 편향(bias) 특성을 더해주기 위해 사용됨
- 편향은 퍼셉트론의 활성화 정도를 조절할 수 있음
- 출력 뉴런: 출력을 결정하는 뉴런
퍼셉트론의 학습
- 개념: 뉴런이 다른 뉴런을 활성화시킬때, 두 뉴런의 연결이 더 강해짐
- 네트워크가 예측할때 만드는 오차를 반영하도록 훈련됨
- 잘못된 예측을 하는 모든 출력 뉴런에 대해 올바른 예측을 만들도록 연결(가중치)를 강화
퍼셉트론의 한계
- 논리 게이트 표현
- 퍼셉트론은 XOR 연산문제를 풀 수 없는 한계가 있었음
퍼셉트론의 한계 극복
- 평면을 휘어주어 XOR 문제 극복
- 퍼셉트론 2개를 한번에 계산
- 퍼셉트론 2개를 각각 처리하는 은닉층을 만듦
다층 퍼셉트론의 개념
- 퍼셉트론을 여러개 쌓아올린 형태
- 입력층, 은닉층, 출력층으로 구성됨
- 피드포워드 신경망 (FeedForward Neural Network)의 한 종류
- 입력층에서 출력층으로 신호가 한 방향으로만 전달되는 구조
- 이 구조때문에 역전파를 통해 네트워크 학습
- 심층 신경망 (DNN)
단순한 형태의 다층 퍼셉트론 예제
(참고) 시그모이드 함수
- 입력값을 0과 1 사이의 값으로 압축시키는 비선형 함수
- 미분 가능한 함수
Summary
-
퍼셉트론의 개념
-
퍼셉트론의 한계
- 퍼셉트론의 한계 극복
- 다층 퍼셉트론의 개념
오차 역전파 알고리즘
다층 퍼셉트론의 학습
역전파
- 신경망이 예측한 결과와 실제 결과 사이의 오차를 신경망에 역으로 전파
- 순전파 (forward process) & 역전파 (backward process) 두 단계로 구성
(참고) 경사하강법
경사하강법
- 최적의 해법 (원하는 값)을 찾는 알고리즘
- 아이디어: 비용함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 것
- 파라미터 벡터 θ 에 대해 비용함수의 기울기가 감소하는 방향으로 진행
- 순간 기울기가 0인 점이 곧 우리가 찾는 비용의 최솟값
경사하강법의 과정
- a1에서 미분을 구함
- 구한 기울기의 반대 방향 (기울기가 +면 음의 방향 / 기울기가 -면 양의 방향)으로 어느정도 이동시킨 a2에서 미분을 구함
- 앞에서 구한 미분 값이 0이 아니면 1 & 2 과정을 반복
학습률 (Learning Rate)
- 과정 2에서 어느정도 이동할 것인지 결정하는 변수
- 학습률이 크면 많이 이동하고, 학습률이 작으면 적게 이동
순전파와 역전파
- 순전파
- 입력 데이터는 네트워크 입력층으로 전달되어 첫번째 은닉층으로 보내짐
- 해당 층에 있는 모든 뉴런의 출력을 계산하고 결과를 다음 층에 전달
- 2의 단계를 마지막 출력층의 출력을 계산할때까지 반복
- 출력층의 결과와 정답 간의 오차를 계산
- 역전파
- 계산된 오차에 각 출력 연결이 기여하는 정도를 계산
- 연쇄법칙을 적용하여 이전 층의 가중치가 오차에 기여하는 정도 계산
- 2의 방법을 반복하여 입력층까지의 오차 그래디언트 계산
- 경사하강법을 사용하여 오차 그레디언트를 이용해서 네트워크의 가중치를 수정
오차 계산하기
- 계산 방법: 손실함수를 사용해 정답과 예측간의 오차 계산 & 가중치 변경
- 미세 조정 (fine tuning)
- 네트워크의 파라미터 (가중치)의 값을 변경하는 과정
대표적인 손실 함수
- 선형 회귀의 경우
- 평균 제곱 오차 손실 (MSE; Means Squared Error Loss)
- 로지스틱 회귀의 경우
- 교차 엔트로피 손실 (Cross-Entropy Loss)
(참고) 오차 계산하기
평균 제곱 오차 손실 (MSE Loss)
- 예측한 값과 실제 값 사이의 평균 제곱 오차
- 데이터가 예측으로부터 얼마나 퍼져있는지를 나타낸 손실 함수
교차 엔트로피 손실 (Cross-Entropy Loss)
- 예측한 확률 분포와 실제 분포 사이의 차이를 최소화하려는 목적을 가진 손실함수
Cross Entopy란?
- 예측분포가 실제 분포에 대해 얼마나 잘 맞는지 측정
- Pytorch에서의 Cross Entropy 종류
- BCELoss()
- CrossEntropyLoss()
BCELoss()
- 이진 분류 문제의 손실을 구할때만 사용
- 출력 레이어에서 하나의 뉴런을 사용하고 sigmoid 함수를 활성화 함수로 사용
CrossEntropyLoss()
- 다중 분류 문제의 손실을 구할때 사용
- 출력 레이어에서 각 클래스마다 하나의 뉴런을 사용하고 softmax 함수를 활성화 함수로 사용
(참고) 소프트맥스 함수
- 다중 클래스 분류 문제에 자주 사용되는 함수
- 각 클래스에 대한 예측 확률을 계산하는데 사용
- 출력층의 각 뉴런에 대한 입력값을 0과 1사이로 변환하고, 이들 값의 합이 1이 되도록 정규화
Summary
-
다층 퍼셉트론의 학습
- 역전파 알고리즘
- 오차 계산 방법
- 소프트맥스 활성화 함수
-
다층 퍼셉트론의 학습과정 요약
- 정방향 계산
- 각 훈련 샘플에 대해 역전파 알고리즘이 먼저 예측을 만들고 오차를 측정
- 역방향 계산
- 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정
- 경사하강법 적용