반응형

 

스탠포드 머신러닝 강화 15: Lecture 15 - EM Algorithm & Factor Analysis | Stanford CS229: Machine Learning

 

참고로 이번 강의는 후반부에 공식 유도를 설명하는 부분이 있는데 따라가기 힘들었습니다. ㅠㅠ

 

주요내용

  • Recap
  • EM Convergence
  • Gaussian Properties
  • Factor Analysis
  • Gaussian marginals & conditionals
  • EM steps

 

 

지난 시간 내용 Recap

지난 시간에 배운 EM 알고리즘에 대해서 요약합니다. E 단계에서는 Q를 찾고 M 단계에서 P를 최대화하는 theta 세타 를 찾습니다.

 

 

 

 

 

EM Convergence

지난 시간에는 EM의 이론적인 내용을 다루었다면 이번 시간에는 파이썬 같은 프로그래밍 언어에서 어떻게 구현하는지에 대해서 이야기합니다. 먼저 전반적인 절차에 대해서 정리해 봅니다.

 

 

 

아래에서 ...은 위의 내용중 마지막에 있는 공식입니다.  위처럼 최대화 하는 함수를 실행하고 아래 처럼 미분하여 평균 뮤(u)를 수정하면서 이 작업을 반복합니다.

 

 

 

 

Gaussian marginals & conditionals

Gaussian Properties

혼합 가우시안 모델은 카테고리(n)가 작고 관측값(m)이 많이 있을때 상대적으로 잘 동작합니다.

 

그러나 관측값(m)의 수가 카테고리(n)와 비슷하거나 관측값의 수가 카테고리보다 훨씬 작을 땐 성능이 좋지 않습니다.

단일 정규분포 모델에 대해서 알아보겠습니다.

m이 n 보다 많이 작은 경우(n이 큰 경우), 시그마는 Singular/Non-invertable 행렬이 됩니다. 아래 행렬이 Non-invertable 행렬의 예 입니다.

 

이것을 설명하기 위해 그래프를 그려보면 아래와 같습니다.  m과 n이 모두 2일 경우 두 x를 연결하는 아주 앏은 타원의 연결로 표시될 수 있습니다. 좌우로는 무한대에 가깝게 확장되는 모양 입니다. 오른쪽 아래의 점 처럼 조금만 벗어나도 모델의 분포(앏은 타원)에 속하지 못해서 확률은 0이 됩니다.

 

 

 

 

Factor Analysis

위에서 처럼 관측값이 작고 카테고리가 많은 경우에는 가우시안 모델을 이용하면 좋지 않은 성능을 볼 수 있습니다. 그래서 Factor Analysis 같은 방법을 이용하면 좋습니다. Factor Analysis 의 초기 시작은 심리학 실험에서 사용되었습니다. 예를 들면 심리학자가 사람들의 서로 다른 성격 특징을 측정하고자 할때 100개의 질문/특질이 있을 수 있고, 데이터 셋은 30명 정도의 작은 수의 대상자들을 대상으로 하기 쉽습니다. 이러한 경우 표준 가우시안 모델은 잘 작동하지 않습니다. 그러니 다른 대안 들에 대해서 알아보겠습니다.

첫번째 옵션은 시그마를 대각행렬로 제한하는 것입니다.  그런데 이것의 가정은 모든 특성이 서로 상관이 없다는 전제입니다.

 

두번째 옵션은 시그마를 시그마^2으로 제한하는 것입니다. 이렇게 하면 하나의 파라메터에 대해서 하나의 정규분포를 가정하게 됩니다. 완전한 원형의 분포를 말합니다.

 

 

여담으로 많은 빅 소프트웨어 인공지능 회사들도 작은 데이터셋 문제를 격는다고 합니다. 특히, 의료와 같은 경우에는 환자나 병에 대한 많은 데이터 셋을 활용할 수 없는 경우가 많다고 합니다.

 

 

 

 

예1: (Dimension이 1인) 1차원 예시 입니다. 표본수가 m=7이고, 카테고리가 n=2입니다.

 

 

(dimension이 2인) 2차원에 예시를 들어보겠습니다. 표본수 m은 5이고 분포/카테고리는 n=2 인 데이터 입니다.

 

2차원인 화이트보드에서 때어내서 3차원 공간으로 확장하면 아래와 같습니다. ㅋ

바로 이 3차원 가우시안 분포를 중심으로 실제 값들을 표시해보면 아래 그림에서 빨간색 X와 같이 됩니다. 분포의 중심인 검정색 X 근처 어딘가에 빨간색 X가 표시되게 되는 것이지요.(엔드류 교수님의 창의적인 시각자료 활용에 놀랐습니다.ㅋ)

 

 

 

 

 

 

 

 

EM Steps

이후 부터 끝까지는 EM 방법을 이끌어내는 공식을 유도하는 내용입니다.

 

 

 

 

 

E-step

 

 

 

M-step

 

 

 

 

아래는 강의 동영상 링크 입니다.

 

https://www.youtube.com/watch?v=tw6cmL5STuY&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=15 

 

반응형
반응형

 

 

Lecture 14 - Expectation-Maximization Algorithms | Stanford CS229: Machine Learning (Autumn 2018)

 

 

주요내용

  • Unsupervised Learning(비지도 학습)
    • K-means Clustering
    • Mixture of Gaussian: Gaussian Mixture Model (GMM)
    • EM (Expectation-Maximization)
    • Derivation of EM

 

비지도 학습은 이전까지 배웠던 지도학습과 다른 학습 방법입니다. 예를 들면 지도학습은 긍정 데이터와 부정 데이터들이 주어지고 이들을 잘 분류하는 선형 회귀 모델 같은 것을 만들어서 잘 분류하는 회귀선을 만드는 것이었습니다. 그러나 비지도 학습은 레이블이 없는 데이터들이 주어지고, 지도학습에서는 (x, y)가 주어졌지만 비지도 학습에서는 x 만 제공됩니다. 이런 데이터 셋은 {x(1), x(2), ....x(m)} 으로 주어진 x 데이터 m개를 표현할 수 있습니다. 

 

K-means Clustering

첫번째로 이야기할 비지도 학습은 클러스터링 입니다.  x 데이터가 주어지면 두개 또는 그 이상의 그룹으로 묶는 알고리즘 입니다. 가장 많이 사용되는 클러스터링은 시장 구분(Market Segmentation)입니다. 예를 들면 사용자들을 클러스터링하여 어떤 다른 시장으로 그룹핑할 수 있는지 알 수 있습니다. 고객의 나이, 성별, 교육, 지역 등을 가지고 클러스터링 하여 다른 그룹으로 만들 수 있습니다. 

위와 같은 데이터 셋이 제공되면 2개의 그룹으로 클러스터링 하기를 원할 것입니다. k-means의 경우 임의로 클러스터 갯수에 해당하는 위치를 선정하고 

 

데이터 별로 두개의 중심점 중에서 어느 중심점에 더 가까운지를 기준으로 클러스터(색)를 정합니다.

 

두 번째로는 파란색 점들의 평균을 구해서 새로운 중심점으로 정합니다.  

 

그리고는 새로 정해진 중심점을 기준으로 모든 점들에 대해서 다시 어느 중심점이 더 가까운지 비교하여 새로운 클러스터를 할당합니다.

 

그리고 다시 새롭게 할당된 클러스터의 중심점을 구합니다.

 

 이런 클러스터를 할당하고 새로운 중심점을 구하는 동작을 반복하다 보면 특정 지역에 중심점이 수렴하게 됩니다.

 

이런 알고리즘을 k-means 알고리즘이라고 합니다.

레이블 되지 않은 Data x 가 주어졌을 때 알고리즘은 아래와 같습니다. 1. 먼저 중심점을 초기화 합니다. k 갯수 만큼의 중심점의 초기 값을 정하는 것인데 보통 random 값으로 잡지 않고 실제 Data x 값들 중에서 k 개를 임으로 선택합니다. 

 

 

비용함수를 공식으로 적어보면 아래와 같습니다. c는 각 점들을 의미하고, u 뮤는 중심점을 의미 합니다. 각 x 값과 중심점과의 차이를 모두 더한 값으로 반복할 수록 작은 값으로 수렴하게 됩니다. 아주 많은 데이터를 가지고 이 알고리즘을 돌리다보면 아래의 그래프 처럼 수렴하기 전에라도 어느 정도 중심점이 변하지 않으면 종료하기도 합니다.

 

k-means 클러스터링과 관련해서 가장 많이 받는 질문은 어떻게 k 값을 정하는가? 입니다.  메트릭이 있기는 하지만 잘 쓰지는 않습니다. 보는 사람마다 다르게 판단할 수 있기 때문에 모호합니다.

2가 맞을 까요 4가 맞을까요?

오히려 목적에 맞게 k를 정하는 것을 권합니다. 예를 들어 마케팅을 위해 마켓 세그멘테이션이 필요하고 이를 위해 클러스터링을 한다고 했을때, 그룹핑을 4개로 할 수도 있고 100개로 도 할 수 있지만 업무적으로 프로모션을 위한 그룹 설계가 4개로 준비되어 있을 경우 4개로 그룹핑하여 제공해야 실무에서 마케팅에 사용할 수 있습니다.

k-means 알고리즘은 로컬 미니멈에 빠질 수 있습니다. 이 말은 초기 중심점 값을 어떻게 정하냐에 따라서 알고리즘을 실행할 때마다 다르게 그룹핑 될 수 있다는 의미입니다. 이런 로컬 미니멈에 빠지는 것을 방지하는 방법중 하나는 여러번 알고리즘을 실행 시키고 나서 비용함수의 값이 제일 작은 결과로 정해진 클러스터 결정을 선택하는 것입니다.

 

 

Density estimation

비행기 엔진을 만드는 공장에서 만들어진 엔진의 불량을 탐지하는 모델을 만든다고 생각해 보시죠. 시험 테스트 중에 나온 데이터인 진동 Vibration과 발열 Heat을 가지고 그래프를 만들었을 때 아래와 같이 그려진다고 하겠습니다. 이 때 녹색 점과 같은 데이터를 만들어낸 비행기 엔진의 경우 이상 탐지(Anomaly Detection)으로 탐지 할 수 있습니다.

 

그러나 아래와 같이 분포가 간단하지 않은 경우 그룹핑을 하기 매우 어렵습니다. 이럴때 아래쪽에 있는 두개의 타원형 형태의 가우시안 분포와 이 타원형의 왼쪽에 연결된 또 다른 두개의 타원형 형태의 가우시안 분포, 즉 2개의 가우시안 분포로 전체 분포를 설명할 수 있습니다.

 

1차원 가우시안 분포를 예를 들어 보겠습니다. 아래와 같이 X 데이터가 주어졌을 때 이것은 2개의 가우시안 분포에서 왔을 수 있습니다. 그리고 이번 예시의 경우 두 개의 분포를 연결하면 중앙 부분은 확률이 낮아지는 부분으로 구성된 하나의 분포 곡선을 그릴 수 있습니다. (아래쪽 쌍봉 곡선)

 

Mixture of Gaussians Model: Gaussian Mixture Model (GMM)

이러한 방법으로 여러개의 다변량 분포가 혼합되어 있는 경우 어느 분포에서 추출될 가능성이 높은지를 알 수 있습니다.

latent 는 hidden 또는 unobserved의 의미 입니다. z는 랜덤 변수값이고 다중 분포일때 z ㅌ {1, ... k} , x(i), z(i)는 결합 분포를 가지고 있습니다. 이 것은 P(x(i), z(i)) = P(x(i) | z(i)) P(z(i)) 로 계산됩니다. 

일반적으로 GDA Gaussian Distribution Analysis 는 2개의 분포, 즉 베르누이 분포를 말하지만 여기에서는 k개의 분포를 가지는 다형성의 파이를 갖습니다. 이 것이 첫번째로 GDA와 다른 것이고 두번째는 j분포 갯수의 차이 입니다. z(i)가 j번째 가우시안 분포에서 나왔을때 x(i)가 나올 확률은 평균이 uj 이고 분산이 시그마j 인 정규분포에서 나올 확률과 같습니다.  GDA와 가장 큰 차이점은 GDA는 데이터 y(i)가 관측된 값으로 주어진다는 것입니다. 

 

 

만약 우리가 z(i)의 값들을 알고 있다면 MLE를 사용할 수 있습니다. 그때 가능도는 아래와 같이 구할 수 있습니다.

 

 

EM (Expectation-Maximization)

EM은 관측되지 않는 잠재변수에 의존하는 확률 모델에서 최대가능도(maximum likelihood)나 최대사후확률(maximum a posteriori, 약자 MAP)을 갖는 모수의 추정값을 찾는 반복적인 알고리즘을 말합니다. (위키피디아)

첫번째 E-step은 아래와 같습니다. 우리는 실제 z(i) 값을 모르기 때문에 주어진 값들을 이용해서 기대값을 찾는 단계입니다. 여기서 z(i)란 x(i)가 뽑힐 수 있는 특정 정규분포 j를 말합니다.

 

두번째 단계는 M-step 입니다. 앞에서 찾은 기대값을 최대로하는 모수 값을 찾습니다.

이러한 단계를 거처 기대값을 최대로 하는, 여러개의 분포가 합쳐지는 하나의 분포 곡선을 만들 수 있습니다. 이러한 곡선은 아래처럼 다양합니다.  이로써 찾은 함수를 통해 입력값 x를  실행했을때 결과 확률값이 특정 기준(입실론) 보다 크거나 같으면 정상적인 데이터이고 확률값이 작으면 이상탐지(Anomaly)로 판단할 수 있습니다.

 

 

 

 

 

Derivation of EM

이후 아래는 EM의 공식을 유도하는 내용입니다.

Jensen's inequality

함수 f를 아래로 볼록한 함수(Convex function)이라고 하고 x를 임의의 값이라고 할때, 공식 f(EX) <= E[f(x)] 를 만족합니다.

 

 

 

 

우리는 젠슨의 불균형 공식을 위로 볼록한 Concave 함수로 사용합니다. Concave 함수는 Convex 함수와 위/아래가 바뀐 함수이지요. 그럴 경우 위에서 설명한 모든 부등식을 반대로 바꾸면 됩니다.

임의의 녹색 theta세타 값을 먼저 설정합니다. 이 값에 해당하는 함수곡선(녹색)을 만들고 이 함수와 목표 함수(검정색)가 만나는 점을 찾고 이 녹색 함수의 꼭지점을 찾습니다. 그리고 이 꼭지점으로 이동합니다. 이 꼭지점에 해당하는 theta값으로 변경 후 다시 함수를 찾습니다. 이러한 내용을 반복하면 검정색의 목표 함수의 지역 최대값(꼭지점)에 점점 가깝게 됩니다. 그러나 아래 그림의 오른쪽 처럼 목표함수가 여러개의 지역 최대값을 가지고 있는 경우 전체 최대값을 찾지 못할 수도 있습니다.

 

아래는 이러한 E, M 단계를 공식으로 풀이 증명하는 내용입니다.

 

위 공식의 변형에 필요한 기본 전제 공식은 아래와 같습니다.

 

 

 

 

 

 

아래는 강의 동영상 링크 입니다.

https://www.youtube.com/watch?v=rVfZHWTwXSA&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=14 

 

 

반응형
반응형

 

Lecture 13 - Debugging ML Models and Error Analysis | Stanford CS229: Machine Learning (Autumn 2018)

 

 

이번 강의의 주요 내용입니다.

오늘은 잘 동작하는 학습 알고리즘을 만들기 위한 조언에 대해 이야기 합니다.
오늘 자료는 깊이있는 수학적 내용은 아닙니다. 그러나 이번 수업에서 어찌보면 가장 이해하기 어려운 내용 중에 하나입니다. 과학과 예술 사이의 문제라고 할 수 있습니다. 어떤 사람들은 완전히 새로운 영역의 혁신적인 기계학습 연구를 할 때 이러한 조언들은 오히려 안 좋은 것이라고 말합니다. 그러나 기존에 연구된 유사한 문제를 유사한 방법으로 풀기위해서는 많이 도움되는 좋은 조언이라고 할 수 있습니다. 주요한 내용/아이디어는 다음과 같습니다. 1. 학습알고리즘을 디버깅하기 위한 진단방법은 무엇인가. 2. 에러 분석과 제거 분석은 무엇인가. 3. 기계학습 문제에서 통계적 최적화를 어떻게 시작할 것인가.

1. 학습알고리즘을 디버깅하기위한 진단방법은 무엇인가?

스팸 메일을 막기위한 Anti-spam 모델을 만든다고 가정해 보겠습니다. 모든 영어 단어를 피처로 이용하는 대신에 100개의 단어를 피처로 골랐습니다. 로지스틱 회귀와 경사 상향법을 가지고 모델을 구현하였습니다. 그래서 20%의 테스트 에러가 발생했는데 이것은 쓸수 있는 수준이 아닙니다. 자 이런 상황에서 여러분이라면 무엇을 하시겠습니까?

로지스틱 회귀와 같은 모델에 대한 일반적인 접근은 아래와 같은 내용들입니다. 즉, 훈련 데이터를 더 늘리거나, 피처의 갯수를 줄이거나, 더 많은 피처를 사용해볼 수 있겠지요. 또는, (이메일에서 해터 정보나 본문의 피처로 변경해서 훈련해보거나, 더 많은 반복을 실행해 볼 것 입니다. 다른 방법으로는 뉴턴 메소드를 이용해보거나, 러닝 레이트(학습률) 람다를 바꾸어 훈련해보거나 아예 모델을 바꾸어서 SVM을 사용하는 것을 시도 할 수도 있습니다. 그런데 이런 시도들은 사람에 따라서 달라집니다. 즉, 전에 프로젝트에서 어떤 것을 해봤고 효과가 좋았는지 등의 경험을 통해서 아무거나 선택되기 쉽습니다. 또는 리더의 지시 방향에 따라서 그저 선택되고 시도해 보게 되기도 합니다. 즉, 체계적이지 않다는 것이 문제 입니다.




가장 기본적이고 효과적인 진단 방법은 바이어스/베리언스(bias vs. variance) 분석입니다. 무엇이 문제인지를 진단하고 그 문제를 고치는 방법입니다. 보통 모델의 성능이 좋지 않다고 하면 오버피팅이나 언더피팅일 경우입닌다. 오버피팅은 variance가 높은 경우를 말합니다. 반대로 언더피팅은 bias가 높은 경우를 말합니다. 예를 들면 스팸을 분류하기위해서 너무 작은 수의 피처가 사용되면 bias가 클 확률이 높아집니다. 이처럼 모델의 성능의 안정성을 진단하는 방법중 하나가 바로 variance와 bias를 알아보는 것입니다. variance가 큰 경우는 훈련 에러가 테스트 에러보다 훨씬 작은 경우에 발생 합니다. 즉, 훈련에서는 잘 맞추는데 테스트에서는 못 맞추는 경우 입니다. Bias가 큰 경우는 훈련 에러와 테스트 에러가 모두 높은 경우 입니다. 아무리 훈련해도 에러를 줄이지 못하는 상황이 많습니다.



높은 variance를 가지는 모델의 에러와 데이터 량을 그래프로 그려보면 아래와 같습니다. 데이터 수가 많아져도 훈련 에러율과 테스트 에러율의 차이가 계속 발생하고, 훈련 때는 원하는 에러율보다 낮지만 테스트 할때는 높습니다. 그리고 테스트에서는 원하는 목표 에러율보다 낮아지지 않습니다. 목표에러와 테스트 에러의 차이가 많이 난다는 의미입니다. 데이터(m)가 늘어 남에 따라서 테스트 에러율이 낮아지고 있으므로 더 많은 데이터가 도움이 될 것 입니다. 그럼에도 불구하고 훈련 에러율과 테스트 에러율 사이에 차이가 있습니다. 높은 Variance가 있을 경우 아래와 같은 그래프를 보입니다.



다음은 높은 bias를 가진 러닝 커브의 예를 들어 보겠습니다. 높은 바이어스가 있는 경우 훈련 에러와 테스트 에러는 데이터가 많아 짐에 따라서 비슷해지지만, 심지어 훈련 에러율도 원하는 에러율 보다 않좋게 나오는 경우 입니다. 훈련이 잘 안되는 거죠. 이런 경우에는 아무리 많은 데이터 사례를 더 모아서 훈련해도 원한는 모델을 만들 수 없습니다.



Bias-variance is the single most powerful tool for analyzing the performance of a learning algorithm.
guess some problems and find out whether the model has the problems or not.


일반적으로 많이 연구되지 않은 새로운 영역의 모델을 만들때 추천하는 방법은 먼저 지저분한 코드라도 빠르게(Quick and dirty code) 만들어서 돌려보고 Bias/Variance 진단을 해보는 것입니다.



앞서 살펴본 Bias / Variance 문제가 가장 흔하고 가장 중요한 진단 방법입니다. 그밖의 다른 문제에 대해서는 무엇이 잘못된 것인지를 알아내기 위한 당신의 진당방법을 만들기위한 당신의 창의성에 달려있습니다. 다른 예를 들어 보겠습니다. 로지스틱 회귀 모델을 통해 스팸 메일에 대해 2%의 에러율과 정상 메일에 대해 2%의 에러율을 얻었다고 합시다. 실제로 사용하기 어려운/받아들이기 힘든 수준입니다. 또 다른 성형 커널 기반의 SVM 모델을 이용해서 스팸 메일에 대해서 10%의 에러율을, 정상 메일에 대해서 0.01%의 에러율을 얻었습니다. 이정도 성능은 받아들일만 하다고 하겠습니다. 그런데 당신은 계산의 효율성을 위해서 로지스틱 회귀 모델을 사용하기를 원합니다. 어떻게 해야할 까요? 


다른 일반적인 질문중 하나는 '알고리즘이 수렴하고 있는가?' 입니다. 오브젝티브 함수를 지켜봄으로써 알고리즘이 수렴하고 있는지를 말하기 어려운 경우가 종종 있습니다. 일반적으로 훈련 반복을 늘리면 오브젝티브 함수는 조금씩 올라가게 됩니다. 그런데 얼마나 더 많은 반복을 해야할까요? 더 많은 반복이 효과적일지 아닌지 어떻게 알까요? 보다 체계적인 방법이 없을까요? 

 

아마도 무엇이 잘 못 되었는지 생각해 본다면 다음과 같은 질문을 할 수 있습니다. 최적화를 위해 올바른 함수를 사용하고 있는가? , 로지스틱 회귀가 맞나? 학습률은 적절한가? 등이 그것 입니다.

 


SVM은 보통 로지스틱 회귀를 능가하는 성능을 보입니다. 그러나 여러분은 어플리케이션을 위해서 로지스틱 회귀 모델의 배포를 원하는 상황입니다. SVM의 성능이 BLR을 능가함으로, 가중치를 적용한 SVM과 BLR의 정확도를 비교하면 a(θ SVM)이 더 커야 합니다.

BLR 베이지안 선형회귀 (위키피디아)
In statistics, Bayesian linear regression is an approach to linear regression in which the statistical analysis is undertaken within the context of Bayesian inference. When the regression model has errors that have a normal distribution, and if a particular form of prior distribution is assumed, explicit results are available for the posterior probability distributions of the model's parameters.
https://en.wikipedia.org/wiki/Bayesian_linear_regression

 

Bayesian linear regression - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method of statistical analysis In statistics, Bayesian linear regression is an approach to linear regression in which the statistical analysis is undertaken within the context of Bayes

en.wikipedia.org


베이지안 회귀 분석 https://mons1220.tistory.com/212

 

[통계] 베이지안 회귀분석

 회귀는 데이터로부터 모델을 추정하는 한 방법이다. 최소자승법이 잔차를 최소화 시키는 방법이라면, 베이지안 회귀는 가능도 최대화가 목적이다.  이 글의 최종 목표는 베이지안 회귀의 원

mons1220.tistory.com




먼저 최적화 알고리즘의 문제가 있으면 경사하강법은 수렴하지 않을 수 있습니다. 두번째로 잘못된 비용함수를 이용하면 학습되지 않을 수 있습니다.
즉, 진단해야할 것은
1. 옵디마이징 알고리즘이 잘못되서 수렴하지 못하는 건지
2. 아니면 비용함수를 잘못 만든 것인지
확인이 필요합니다.
로지스틱 회귀가 최대화 하려는 비용함수를 확인해볼 필요가 있습니다.




이를 위한 진단 방법은 아래와 같습니다. 앞서본 정확도 a(θ)와 비용함수 J(θ)를 가지고 무엇이 잘못된 것인지 진단 할 수 있습니다. 

 


케이스1 의 경우는 최적화 알고리즘에 문제가 있는 경우이고, 케이스2의 경우는 비용함수가 문제인 경우입니다.

 

그래서 앞서 살펴 봤던 여러 개선 방법들 중에서 최적화 알고리즘의 문제를 해결하기 위한 방법들과 비용함수 문제를 해결하기 위한 방법들이 아래와 같이 매칭 됩니다.

SVM을 시도하는 것도 오브젝티브 함수를 최적화 하는 것을 고치기 위한 방법중 하나 입니다. 

 

 

 

 

Debugging an RL algorithm

강화학습에 대한 상세 내용은 별도로 정리하겠습니다.







 

 

 

 

 

 

Error Analysis

일반적인 얼굴인식 시스템의 절차는 다음과 같습니다.


원본 사진에서 배경을 지우고


얼굴을 찾고


얼굴에서 눈, 코, 입을 찾고


모델(로지스틱 회귀)을 실행시켜서 최종 아웃풋 레이블을 만듭니다.


전체적인 플로우는 다음과 같습니다.

따라서 각각의 단계 / 모듈이 오류율을 어떻게 변화하는지를 확인할 수 있습니다.

 

 

 

Ablative analysis

Ablative analysis는 각 콤포넌트가 최종 성능에 각각 얼마나 기여했는지를 측정하는 방법입니다. 좋은 피처들이 없는 단순 선형 회귀 모델을 통해서 94%의 성능이 나오고 콤퍼넌트를 추가했을 때 99.9%로 모델 성능이 향상 된 것을 어떻게 설명할 것인가? 라는 질문에 대답할 수 있는 방법이 Ablative analysis입니다. 즉, 기본 베이스 라인 모델(94%)에서 시작해서 하나씩 콤퍼넌트가 추가될때 마다 성능(Accuracy)이 어떻게 변하는지 확인하는 방법입니다. 이런 Ablative analysis를 통해서 어떤 콤퍼넌트가 성능향상에 가장 기여를 많이 하는지 알수 있습니다.










아래는 강의 동영상 링크 입니다.
https://www.youtube.com/watch?v=ORrStCArmP4

 

반응형
반응형

 

 

주요 내용

  • Backprop - 백프로파게이션(역전파)
  • Improving Neural Networks - 신경망을 더 개선시키는 방법
    • Activation Function - 활성화/활성 함수
    • Initialization Methods - 초기 웨이트 설정 방법
    • Optimization - 최적화 방법

 

지난 시간에는 딥러닝의 첫번째 시간으로 선형회귀 모델과 간단한 신경망을 비교해서 만들고 설명했습니다.  이미지 중에 고양이가 있는지 없는지를 분류하는 네트워크를 만들었습니다. 그 때정의한 Cost Function과 Loss Function(빨간색 박스안의 내용), 그리고 Update 방법은 아래와 같습니다.

업데이트를 할때 미분을 하는데 이때 아웃풋에 제일 가까운 레이어(w[3]) 부터 미분하는 것이 계산하기 좋다는 것 까지 지난 시간에 이야기 했습니다.

 

 

Backprop(역전파)


역전파, 백프로파게이션, Backprop을 해 보겠습니다.  w[3]부터 계산합니다. J (Cost Function)의 값을 w[3] 값으로 미분합니다.

이렇게 계산을 진행하기 위해서는 사실 먼저 알아야할 전제사항/공식이 있는데요 아래와 같습니다.

 

J를 w[3]로 미분하는 위에 위에 있는 이미지에서, 마지막에 a[2]에 왜 Transpose 를 할까요? 바로 행렬간의 계산을 할 수있도록 해주기 위해서 입니다. 아래에서 처럼 transpose를 해주어야 (1, 2) 행렬이 됩니다.

 

계속 풀어보면 다음과 같습니다.

 

이것을 m개의 훈련 데이터에 대해서 평균을 내는 것은 아래와 같습니다.

 

w[3]에 대한 계산이 끝났으니 그 이후에는 w[2]에 대한 미분입니다. 어떻게 하면 더 효율적으로 계산할 수 있을까요? 

로스 함수를 w[3]로 미분한다는 것은 아래의 오른쪽 내용 처럼 분리가 가능한데요.. 이 내용을 자세히 보면 이전에 구했던 왼쪽의 내용에서  변형할 수 있는 값을 유추할 수 있습니다. 바로 a[2]T가 z[3]를 w[3]로 미분한 것과 같다는 것 입니다.

 

그래서 w[2]로 미분하는 공식에 대하여 동등한 내용을 빨간색으로 표시해 보면 아래와 같습니다.

그래서 동등한 내용으로 재 정리하면 아래와 같습니다. 그런데 중간에 행렬의 크기가 일치하지 않아서 행렬 연산이 안되기 때문에 Elementwise dot (모든 요소간의 곱)이 필요합니다. 그렇게 해서 행렬의 크기를 동일하게 맞출 수 있습니다.

상기 내용을 어떻게 프로그래밍 해야할지 걱정하지 않아도 됩니다. 많은 머신러닝 프레임웍에서 이런 계산을 대신해 주기 때문입니다.

포워드 프로파게이션을 하는 동안 계산 내용을 모두 메모리에 저장해 놓았다가 백워드 프로파게이션 시에 사용함으로써 메모리 사용을 줄이고 계산 속도를 높일 수 있습니다.

 

 

 

 

 

Imporving Neural Networks

A) Activation Function

지금까지 배운 내용으로 신경망을 만들고 훈련해도 만족할 만한 성과를 못 얻을 수 있습니다. 그래서 더 좋은 성능을 내는 신경망을 어떻게하면 만들 수 있는지에 대해서 알아보겠습니다.

제일 먼저 가능한 것은 Activation Funcion(활성화 함수)을 바꾸는 것 입니다.

시그모이드 함수나 탄젠트h 함수는 z 값이 아주 커지거나 작아지면 출력값의 차이가 작아져서 w를 업데이트 하는 영향이 거의 없어집니다. 즉, gradient vanishing 문제를 발생하게 됩니다. ReLu는 이런 문제를 해결하는 함수 입니다.

그럼 왜 활성화 함수가 필요할 까요?

위의 두 이미지에서 보면 알 수 있듯이 활성화 함수가 없다면 네트워크의 깊이가 아무리 깊어도 선형 함수의 분류기와 같을 뿐입니다.  

보통 같은 레이어에서는 같은 활성화 함수를 이용합니다. 다른 레이어에는 다른 활성화 함수를 사용할 수 있습니다. 위에서 살펴본 시그모이드 함수(Sigmoid), 레루 함수(ReLu), 탄젠트h 함수(tanh) 이외에도 여러가지가 있지만 기본적인 함수는 이 정도가 됩니다.

 

 

B) Initialization Methods

두번째로는 초기화 방법에 대해서 알아보겠습니다. 아래 이미지는 평균으로 정규화할 경우 변화되는 내용을 설명합니다.

표준편차를 통해 정규한 내용이며 이럴 경우 최적값을 찾아가는 경로가 훨씬 단축되게 됩니다. 그래서 정규화를 하는 것이지요.

상기에서 사용한 평균이나 표준편차는 모두 훈련 데이터에서 계산된 것을 말하며 이것은 테스트 시에도 동일한 값을 이용해서 계산되야 합니다.

 

베니싱 그레디언트(Vanishing Gradient)에 대해서 좀더 자세히 알아보겠습니다. 아래와 같이 히든 레이어가 10개, 활성화 함수는 Identical 함수(그냥 통과하는 함수), 그리고 바이어스는 0인 신경망을 만들었다고 하겠습니다. 아래 계산에서도 볼 수 있듯이 w 의 값이 초기값에 L 승으로 곱한 결과가 됩니다. 따라서 초기 값이 1보다 조금만 커도 결과 값은 아주 큰 값으로 설정이 되고 1보다 작은 값을 설정을 해도 결과 값은 아주 작은 값으로 설정되게 됩니다. 0.9, 1.1 처럼 1 근처의 값으로 주면 그나마 변화량이 덜 할 것입니다. 그러나 조금만 커져도 엄청낙게 큰 값으로 바뀌고 조금만 더 작아져도 엄청나게 작은 값으로 바뀝니다. 그래서 활성화 함수가 중요합니다.

 

 

하나의 뉴런을 가지고 예를 들어보겠습니다. 보시는 것처럼 n이 커지면 w(i)가 작아집니다.  따라서 w(가중치)의 초기 값을 1/n으로 설정하는 것도 좋은 가중치 초기화 방법 중에 하나 입니다.

그래서 시그모이드 활성화 함수에 대해서는 아래와 같은 코드로 초기화 하는 것이 동작을 잘 합니다.

다른 초기화 방법으로 Xavier Initialization(자비어 초기화)이 있습니다.

 

C) Optimization

세번째 방법으로 옵티마이제이션에 대해서 알아보겠습니다.

아래는 이렇게 배치로 최적화 할때랑 아닐때랑을 비교한 비용함수 곡선입니다.

배치 그레디언트 디센트(Batch Gradient Descent) 방법을 2차원에서 그려보면 아래의 녹색 선과 같이 움직입니다. 이상적인 빨간색 경로보다는 돌아가는 것 같지만 하나의 이터레이션을 훨씬 빠르게 실행할 수 있습니다.

 

또 약간 다른 Gradient Descent와 Momentum(모멘텀) 알고리즘을 소개합니다. 일반적으로 GD를 쓰면 빨간색 선과 같이 움직이면서 최적값을 찾아가는데, 여기에 모멘텀을 더하면 녹색 선과 같이 움직이게 됩니다. GD는 지나온 과거의 움직임을 고려하지 않고 앞으로 나아 갑니다. 반면에 모멘텀은 과거 움직임을 고려해서 앞으로의 방향을 조정합니다. 처음 시작점에서 두번째 점으로 이동했을때 가로, 세로의 변화량을 보면 세로의 변화량은 큰데 가로의 변화량은 작습니다. 이것을 눈치첸 모멘텀은 가로를 더 많이 가게 조정해서 녹색 선의 세번째  점을 향하게 됩니다. 이런 방법으로 학습하면 훨씬 더 빠르게 최적화를 할 수 있습니다.  

모멘텀의 구현방법은 아래와 같습니다.

물론 이러한 방법은 기본적인 내용이며, 이 밖에도 많은 최적화 방법이 있습니다. 그 중에서 특히, Adam과 RMSProp은 신경망에서 많이 쓰이는 최적화 방법들이 있습니다. 

 

 

 

 

 

아래는 강의 동영상 입니다.

https://www.youtube.com/watch?v=zUazLXZZA2U&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=13 

 

반응형

+ Recent posts