1. 머신러닝 개념
1) 회귀
- 지도학습
- 분류
- 데이터의 여러 feature 값을 기반으로 해당 데이터의 class를 추론
- 회귀
- 데이터의 여러 feature 값을 기반으로 해당 데이터와 연관된 종속 변수의 정확한 값을 추론하는 것.
- 회귀분석이란?
- 전통적으로 통계학에서 자주 사용된 분석 방법
- 관찰한 여러 데이터를 토대로 각각의 연속형 변수 간의 관계를 모델링, 모델링한 결과에 대한 적합도를 측정하는 식의 분석 방법
- 독립변수(independent variable, 설명변수 explanatory variable)와 종속변수(dependent variable, 반응변수 response variable) 사이의 상호 관련성을 규명.
- 초기의 회귀분석은 설명변수와 무관하게 평균으로 '회귀'한다는 의미를 지니고 있었음.
- 오늘날의 회귀분석은 두 개 이상의 변수 사이의 함수관계를 추구하는 통계적 방법을 의미함.
- 실생활 예
2) 선형 회귀분석 (Linear Regression)
- 선형 회귀분석의 기본 가정
- 선형성
- 선형성을 만족하지 않을 경우
- 다른 변수 추가
- 로그, 지수, 루트 등의 변수 변환 시도 (변환된 변수의 의미를 해석하기 어려움)
- 선형성을 만족하지 않는 변수 제거
- 선형 회귀모델을 일단 생성한 뒤 변수 선택법을 통과시키기
- 독립성
- 다중 회귀분석에서 중요함. 단순 회귀분석에는 해당 사항 없음.
- 등분산성
- 분산이 같다 = 특정 패턴이 존재하지 않음. 균등하게 분포했다는 의미
- 정규성
- 의미
- 종속변수와 한 개 이상의 독립변수 사이의 선형 상관관계를 모델링하는 하나의 회귀 분석 기법
- 선형 회귀 모델링
- 데이터를 기반으로 추정해야하는 파라미터
- β: 회귀계수
- ϵ: 종속 변수와 독립 변수 사이의 오차
- 주어진 데이터와 잘맞는 선형 식의 회귀 계수 및 오차를 구하는 과정
- 머신러닝에서의 선형회귀모델 표기법
- H: 가정(hypothesis)
- W: 가중치(Weight)
- b: 편향(bias)
- W, b: 고차원 행렬의 형태인 경우가 많음
- 용어
- 잔차(Residuals): 실제 데이터 - 회귀모델을 사용해 추정한 값
- 손실함수: 회귀 계수 구하는 과정에서 사용하는 함수
- 종류
- 최소제곱법
- n 개의 점 데이터에 대해 잔차의 제곱 합을 최소로 만드는 가중치, 편향을 구하는 방법
- 회귀 모델의 추정치와 실제 값의 차이 = 거리를 측정하기에 알맞음
- 결정계수: 회귀모델이 잘 결정되었는지 여부를 확인하는 참고 지표, 0~1로 나타내며 1에 가까울수록 데이터를 잘 표현한다고 해석함
- 경사하강법
- 손실함수의 설정
- 손실함수를 최소화하는 것은 적절한 회귀모델의 회귀계수를 찾기 위해 중요함
- 경사하강법
3) 로지스틱 회귀분석
- Logistic Regression
- 데이터가 특정 범주에 속할 확률을 예측하고 그 확률에 따라 가능성이 더 높은 범주로 분류하는 지도학습 알고리즘
- 이진분류 문제를 해결할 때 많이 사용
- 정의 및 용어 설명
로지스틱 회귀의 단계
1. 실제 데이터를 대입, Odds와 회귀계수를 구함
2. Log-odds를 계산해 결과값을 sigmoid function의 입력에 넣어 특정 범주에 속할 확률을 계산함
3. 설정한 threshold에 맞추어 그 이상이면 1, 아니면 0을 반환해 이진분류 수행
- 로지스틱 회귀는 회귀모델일까?
모델이 연속적인 변수를 반환하기 때문에 회귀 모델의 정의에 부합.
특정 범주에 속할 확률을 반환함으로써 범주를 예측할 수 있다는 점은 로지스틱 회귀 모델을 활용하는 응용 과정이라고 보면 됨.
4) Softmax 함수와 Cross Entropy
- Softmax function
- 다중 로지스틱 회귀에 사용되는 함수: 2 개 이상의 여러 범주로 분류하는 함수
- 큰 log-odds와 작은 log-odds의 차이를 극대화 시켜줌 = 모든 범주의 log-odds를 통과시키면 해당 데이터가 어떤 범주로 분류되는지 알 수 있음. one-hot encoding(가장 큰 값은 1, 나머지는 0으로 표현) 통해 표현
- Cross Entropy
- softmax function의 손실함수
- p(x): 실제 데이터의 범주 값
- q(x): softmax의 결과값
- 사용 이유: 최소제곱법을 이용할 경우 잔차의 중요도가 다 같은 지위로 계산됨. 예를 들어 0.4와 0.6의 차이와 0.8과 1.0의 차이를 같은 값으로 계산하게 되는 것. 이러한 차이를 반영하기 위해 사용
요약
2. 딥러닝 개념 정리
1 ) 딥러닝
- 워렌 맥컬록
- 신경망에 대한 아이디어의 등장: 사람과 같은 방식으로 생각을 하고 행동을 하게 하고 싶다는 생각에서 비롯한 방식. 사람이 배우는 방식을 모방하고자 함.
- 사람(입력) → 이미지 → 블랙박스 → 강아지(출력)
- 뉴런: 인간의 뇌에 1000억 개 넘게 존재, 자극을 받으면 다른 연결된 뉴런에게 전달함.
- 컴퓨터(입력) → 이미지 → 신경망 → 강아지(출력)
- 인공신경망: 인간의 뉴런을 모방. 상황에 따라 가중치의 값이 바뀜.
- 프랭크: 퍼셉트론
- 마빈 민스키: 인공신경망의 허저 발견 - 배타적 논리학(XOR)을 해결하지 못함.
- 다층 퍼셉트론: 은닉층, 역전파법의 등장
- 레이어가 추가될 수록 결과가 안좋아짐 ⇒ 이후 컴퓨터 발전으로 보완
- 제프리 힌튼: 딥러닝의 등장 (발전된 컴퓨터 성능 + 사전 훈련법(레이어, 뉴런의 초기값을 잘 얻을 수 있는 방법))
2) 숫자 인식 예시
- 입력층
- 숫자 필기체를 nn의 영역으로 나눔. 그리고 각각의 영역을 0(흑)~1(백)으로 나타냄. 이후 n^2 1의 배열로 나타나며, 이는 첫 번째 입력층이 됨
- 활성화되는 뉴런들의 특정 패턴이 다음 층의 활성화를 촉진함
- Hidden layers
- 숫자의 sub component와 일치하는지 여부를 보는 것.
- 출력층
- 0~9 10개로 이뤄짐. 각각은 0~1의 값을 가지는데, 이는 일치하는 정도를 나타냄.
- sigmoid 함수
- 입력층에서 hidden layer를 거쳐서 계산이 진행 됨 → 그 과정에서 가중치가 입력층에서의 값에 곱해져 합해진 상태 ⇒ 숫자는 범위 상관없이 지정됨
- 하지만 각 뉴런이 0-1 사이의 숫자를 가지고 있기 때문에, 가중치와 입력층의 값으로 최종 계산된 값을 0-1 사이의 숫자로 바꿔주는 단계가 필요함
- 위와 같은 단계를 수행하는 것이 시그모이드 함수.
- bias: 0이 아닌 다른 값을 기준으로 삼고 싶다면 다른 음의 숫자를 더해주는 방식으로 조정 가능
- learning: 가장 오류가 적은 weight, bias을 찾아가는 과정
- 식을 간단하게 나타내기
3) gradient descent
- 의미
- 최소 함수 값을 찾는 것
- 회귀 분석에 필요한 내용
- 1차 근삿값 발견용 최적화 알고리즘
- 직관적 의미
- 함수 값이 작아지는 방향으로 독립 변수(x)의 값을 변형시켜가며 최종적으로 최소 함수 값을 갖도록 하는 독립 변수의 값을 찾는 방법
- 목적과 사용하는 이유
- 목적
1. 손실함수에서 기울기를 이용해 계산하며, 손실이 가장 낮은 가중치를 찾아 업데이트 하기 위함
2. 함수의 기울기를 구하여 기울기가 낮은 쪽으로 이동을 반복. 극값에 이를 때까지 반복한다.
- 미분 계수가 0인 지점을 찾지 않고 경사하강법을 이용하는 경우
1. 함수가 닫힌 형태가 아닌 경우
2. 함수가 너무 복잡(ex: 머신러닝, 딥러닝의 NN, 회귀 모델)해서 미분 계수를 구하기 어려운 경우
3. 경사하강법을 구현하는 것이 미분계수를 구하는 것보다 쉬운 경우
4. 데이터 양이 방대할 경우 (효율적 계산을 위함)
- 방법
- 함수의 기울기를 이용 - 기울기 부호의 반대 방향으로 이동
- 최소값에 가까워질 수록 이동하는 크기가 작아져야 함
- 이동 거리 조절을 위해 step size 조절 인자를 부여, 이동 거리를 정해주는 학습률(learning rate) 지정
- 너무 작으면 시간이 오래 걸리고, 너무 크면 오히려 값이 커질 수 있음
- 문제
- local minima - 극소값이 여러 개일 때 잘못 찾는 경우.
- 해결 방법: momentum
- 기울기에 관성을 부여. 작은 기울기는 쉽게 넘어갈 수있도록 만드는 것.
- 학습 시간이 많이 소요됨
- 해결방법: Stochastic Gradient Descent(확률적 경사하강법)
- 매 step에서 한 개의 샘플을 무작위로 선택, 그 하나의 샘플에 대한 기울기를 계산함.
4) 순전파와 역전파
- 순전파
1. 순방향 계산: input으로부터 output이 나올 때까지 순서대로 계산을 하는 과정
2. 입력층 ⇒ 은닉층 ⇒ 결과값의 순서로 진행되며, 각 입력에 해당하는 가중치가 곱해져 결과적으로 가중치의 합이 계산됨
3. 학습 X, 추론 O ⇒ 모델 추론
- 역전파
- input 과 output 값을 알고 있는 상태에서 신경망을 학습시키는 지도 학습의 일종.
- 학습 과정에서만 이용
- 순전파 알고리즘을 이용해 계산했을 때 발생한 오차를 줄이기 위해, 새로운 가중치를 업데이트하며 다시 학습하는 과정
- 초기 가중치는 랜덤으로 정해짐
- 각 노드는 하나의 퍼셉트론, 노드를 지날 때마다 활성함수를 적용
- 오차가 0에 가까워질 때까지 반복.
- 가중치는 경사하강법으로 결정
- 문제
- 은닉층이 깊어질 수록 가중치가 0으로 수렴, 정확성이 감소
- 해결책: ReLu 알고리즘 사용
- 역전파가 필요한 이유
- 만약 순전파로 계산한다면?
- input에서부터 바뀐 가중치로 다시 계산해야함. 이렇게 되면 output 에서 loss 차이(어떤 loss랑 차이가 많이 난다는 거? 가중치가 업데이트 되기 전의 output?)가 너무 많이 날 수 있음
- 옵티마이저를 학습하는 과정에서 다음 층의 미분결과가 필요한데 순전파로 계산할 경우 다음 층의 미분 결과를 알 수 없으므로 가중치 업데이트 불가
- 위와 같은 방식은 통하지 않으므로 역전파 방법이 고안됨.
5) 오차역전파
- 개념
- 신경망 내부의 가충치를 수정하는 방식
- 경사하강법 활용 (역전파를 이용하는 경우 자동적으로 사용하게 됨)
- 임의의 가중치 선언 ⇒ 결과값과 비교해 오차를 구함 ⇒ 오차가 최소인 지점으로 이동을 반복 ⇒ 미분 시 기울기가 0이 되는 점을 찾음
- Deep neural network(hidden layer가 세 개 이상인 경우)에서 사용
- 타겟 값과 모델이 계산한 output 값이 얼마나 차이가 있는지 계산한 후 뒤로 전파시키면서 가중치 값을 갱신하는 방법
- 방식
- 임의의 초기 가중치를 줌 ⇒ 그에 따른 결과를 계산
- 계산 결과와 결과값을 비교해 오차를 구함
- 경사하강법을 이용, 앞의 가중치를 오차가 작아지는 방향(기울기의 절댓값이 작아지는 방향)으로 변경
- 오차가 줄어들지 않을 때까지 반복
- 계산 방식
모두의 딥러닝 개정 2판에 나온 내용을 정리함
아래는 W31 값을 업데이트 하기 위해 오차역전파의 공식을 이용한 것
-
W31: 이미 알고 있는 값
-
t: 한 단계 앞 ⇒ t+1: 현재 단계의 계산
-
W31 * t: 한 단계 앞에서 이미 계산된 값
-
오차~: 구해야하는 값 ⇒ 오차 Y를 구하고 W31에 대해 미분하라.
참고: 오차역전파 나만의 정리
6) 신경망
- Input layer, hidden layer, Output layer
- 입력층
- 입력데이터의 크기를 설정, 들어온 신호를 다음 노드에 전달하는 역할(가중합, 활성함수 계산 안함)
- 은닉층
- 좌표 평면을 왜곡, 특성을 출력하는 층. 신경망 외부에서 직접 접근 불가
- 입력층에서 은닉층으로 들어가는 입력값(a1(1), a2(1))과 가중치 W를 곱하고 바이어스를 더한뒤 (선형회귀)의 값을 활성화함수(sigmoid)로 0 ~ 1사이의 값 출력
- 은닉층이 여러 개라면 활성화함수도 그만큼 쓰이는 것
- 은닉층은 왜 추가되었을까? 선형 분류의 한계(XOR 문제)를 해결하기 위함
- 출력층
- Weight, Bias
- y=wx+b (w는 가중치, b는 바이어스)
- Activaiton Function
- 활성화 함수: 가중합(입력값 * 가중치 + 바이어스)의 결과를 두고 1 or 0을 판단하는 함수
- 대표적인 예) 시그모이드 함수
- Fully-connected layers
- 한 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결된 상태
- 행렬을 1차원 배열의 형태로 평탄화함. 이를 이미지를 분류하는 데에 사용함.
3. 회고
저번에 정리가 잘 안된 채로 발표를 하게 돼서 이번엔 최대한 자세하게 공부하려고 노력했다. 회귀를 정리하고 경사하강법, 역전파법을 정리해서 이해가 더 잘되는 느낌이었다. 남이 물어보면 30% 정도는 대답할 수 있는 상태 아닐까 예전엔 0에 수렴했으니 큰 발전이라고 생각한다.
오차역전파 계산하면서 수학이 정말 부족하구나를 느꼈다. 어느 정도는 분명 예전에도 배운 부분인데 기억이 안나서.. 수학을 공부해야하는데 어디서부터 다시 해야할지 감도 안잡힌다. 그래도 다행인건 미분은 조금 봤더니 기억이 났다. 앞으로 통계 스터디도 그렇고 다른 부분도 공부하기 위해 시간을 더 할애해야할 거 같다. 아이펠 외 시간에 공부하고 싶지 않았는데..ㅎ 어쩔 수 없지~!~~