일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C언어 공부
- 파이토치 김성훈 교수님 강의 정리
- 팀프로젝트
- pytorch zero to all
- 골빈해커
- tensorflow 예제
- c언어
- Pytorch Lecture
- 파이토치 강의 정리
- 김성훈 교수님 PyTorch
- 영상처리
- object detection
- c++공부
- 케라스 정리
- pytorch
- 모두의 딥러닝 예제
- TensorFlow
- c++
- matlab 영상처리
- 컴퓨터 비전
- c언어 정리
- 딥러닝 스터디
- 미디언 필터링
- 딥러닝 공부
- MFC 프로그래밍
- 딥러닝
- 파이토치
- 해리스 코너 검출
- 가우시안 필터링
- 모두의 딥러닝
- Today
- Total
ComputerVision Jack
머신러닝 가이드 - Chapter4 MLP 본문
1. 다층 퍼셉트론
다층 퍼셉트론
다층 퍼셉트론(MLP : Multi-layer Perceptron) 가장 보편적으로 사용되는 뉴럴 네트워크.
이를 사용할 때 작동 원리를 이해하지 못하고 블랙박스(black box)로 취급되며, 이는 수행에 문제점을 내포한다.
뉴럴 네트워크는 가중치를 통해서 학습한다. 이에 대해 더 많은 계산을 수행하려면 가중치를 추가하면 된다.
가중치 추가 방법
- 출력 뉴런들이 다시 입력으로 들어가도록 반대 방향으로 연결되는 가중치 추가 (순환망 - Recurrent Networks)
- 더 많은 뉴런을 추가한다.
목표 값을 도출해낼 수 있는 가중치를 찾도록 네트워크를 수정하려면
퍼셉트론에 사용했던 출력 값의 에러(오차) 계산법을 생각해 볼 수 있다.
은닉층(hidden layer)
하지만 중간층을 추가하면 네트워크 중간에 있는 가중치에 대해선 직접적인 값 설정이 불가하기 때문에
이러한 중간층을 은닉층이라고 한다.
전향
MLP 트레이닝 방법
- 전향(Forward) : 주어진 입력값과 가중치 값을 통해서 계산되는 출력
- 후향(backward) : 출력 값과 목표 값의 차이 값에 대해 가중치 갱신하는 단계
퍼셉트론과 거의 유사 방식으로 전향 방식은 작동한다. 다른점은 중간층이 추가되었기 때문에
중간층에 대한 입력을 입력층을 통한 연산결과를 적용하여 퍼트린다.
바이어스(Bias)
중간층을 통해서 생성해도 각 뉴런별로 바이어스를 도입해야한다. 퍼셉트론에 적용했듯이 하나의 입력 값을
-1로 설정해서 각 뉴런으로 가는 가중치 값들의 조절을 통해서 트레이닝에 적용한다.
2.후향 : 오차 역전파
오차 역전파(back-propagation)
후진 방향으로 갱신되는 부분이 알고리즘에서 어렵다. 출력값의 에러를 계산하는 것은 쉽지만 그 값을 통해서
갱신해 나아가는 것이 어렵다.
따라서 오차 역전파를 통해서 에러를 네트워크 반대 방향으로 보내고 이를 기울기 하강법을 적용하여 해결한다.
역전파 이해 도구
- 미분학
- 다른 변수에 대해서 미분하면 그 값이 0
- 연쇄 법칙(Chain rule)을 다변수 함수 미분시 적용
다층 퍼셉트론의 가중치 조율에 대해서 어떤 가중치가 에러를 만들어 냈는지 알아내야한다.
퍼셉트론의 오류는 단지 출력값 - 목표값이면 다층 퍼셉트론에선 에러 값의 부호를 통일하기 위해
에러의 제곱합을 사용한다.
tensorflow의 tf.reduce_mean(tf.square(hypothesis - Y))에 상응한다고 생각하면 편하다.
기울기 하강법(Gradient Descent)
따라서 이러한 오차 함수를 미분하면 에러의 기울기를 찾아낼 수 있다. 학습의 목표는 에러를 줄이는 것으로
오차 함수의 내려가는 방향의 길을 따라가면(미분 적용) 오차를 최소화 할 수 있다. 이러한 방법
이는 제곱을 통해 함수 자체가 이차함수처럼 표현 되기 때문에 미분 적용이 가능하다고 생각하면 편하다.
활성화 함수또한 기존 퍼셉트론에 대해선 중간 값이 갑자기 변화는 비연속성을 내포하기 때문에 미분이 불가능하다.
따라서 뉴런을 활성화하고 비활성화하는 그 중점에서 값이 갑자기 변화는 함수를 찾아야한다.
- 시그모이드 함수(Sigmoid function)
- 쌍곡선 탄젠트 함수(hyperbolic tangent fuction)
위 두함수는 이러한 미분 계산식에 적합한 함수 모형을 갖고 있다. 두 함수의 차이점은 수렴하는 값에 있다.
층별 갱신 어려운점
입력층에 이를 때까지 층별로 적용해서 갱신하기위한 방법에 어려움이 존재한다.
- 출력 - 뉴런들의 입력 값을 모른다.
- 은닉층 - 뉴런들은 목표 값을 모른다.
위 에대한 문제를 다음 도구인 연쇄법칙(chain rule)을 통해 해결할 수 있다. 연쇄 밥칙에 따르면
가중치 값이 변환에 따라 에러가 어떻게 변화는지 알싶다면 가중치에 대한 입력 값을 변화하면
어떻게 에러가 변하는지와 가중치가 변함에 어떻게 입력값이 변화는지 곱하면된다.
다층 퍼셉트론 알고리즘
- 입력 벡터를 노드에 입력한다
- 네트워크를 통해서 가중치 값들이 들어간다
- 네트워크의 출력 값과 목표 값 차이의 제곱합으로 에러를 구한다
- 에러 값은 네트워크의 반대 방향으로 입력된다
가중치 초기화
가중치 값을 -1또는 1로 가깝게 초기화하면 시그모이드에 입력 값은 +1과 -1에 가까우며, 뉴런 출력 값은
0또는 1이된다. 가중치 값은 매우 작다면 입력 값은 여전히 0에 가깝고 뉴런의 출력 값은
1차원 함수를 따르므로 선형 모델이 된다.
다른 출력 활성화 함수
회귀 문제에선 출력 값에 있는 시그모이드 뉴런은 그리 좋지 않다. 대신 선형 노드들로 변환해서
입력 값들의 합을 통해서 활성화 할수 있다.
또 다른 방법으로는 소프트 맥스(soft max)활성화 함수가 존재. 분류 문제에 많이 사용된다.
소프트 맥스 함수는 활성화 출력 값의 합이 1이되고, 모두 0에서 1사이에 놓이도록 한다.
소프트 맥스 함수(지수 함수) 따라서 이에 대응하도록 비용함수를 정의하면 크로스 엔트로피(cross entropy) - 로그 함수가 된다.
순차와 배치 트레이닝
- 순차적인 버전(sequential version) : 에러와 가중치 갱신이 각각의 데이터 입력 값에 대해 이루어짐
- 배치 버전 : MLP는 배치 알고리즘이다. 뉴럴 네트워크에 모든 트레이닝 예제들이 전달되면 에러 제곱합 계산을 통해서 가중치를 갱신한다.
지역 최솟값
학습 규칙(Learning Rule)의 원동력은 네트워크의 에러를 경사하강법을 통해서 에러를 줄여나간다. 오차 함수를 줄여 가는 방식으로 가중치 값을 변경하며 최적화를 수행한다.
하지만 때로는 지역 최솟값에 빠지는 경우가 존재한다.
우리는 단지 지역적인 피처를 통해서 현재 위치 주변에 대한 계산을 해나아간다.
보통의 경우 여러가지 다른 출발점에서 다른 여러 개의 네트워크의 최솟값을 찾도록 시도해 전체 최솟값을 찾는다.
모멘텀
지난번 갱신한 가중치 값을 현재 가중치 갱신 값의 모멘텀을 적용해서 뉴럴 네트워크 학습에 적용 가능하다.
모멘템은 작은 학습률을 이용할수 있는 단점이 있다.
가중치 감소(weight decay)
반복 횟수가 증가하면서 가중치의 크기를 감소시키는 것. 작은 가중치들은 네트워크를 선형으로 만들어 주며,
비선형적인 학습 부분에 영향을 주는 가중치는 커져야 한다.
미니 배치
배치 알고리즘과 순차 알고리즘의 장점을 수용한다. 트레이닝 데이터를 무작위의 배치로 나누고, 각각의
배치에 대해서 기울기를 측정하고 가중치를 갱신하는 방법은 모든 배치가 사용될 때까지 돌아가며 가중치를 갱신한다.
미니 배치의 다른 방법으로 무작위로 하나의 데이터를 사용해서 알고리즘의 기울기 예측에 사용하는 방법
새로운 무작위 입력 벡터가 선택되고, 다시 과정을 반복한다. 이는 확률 기울기 하강법(stochastic grdient descent)이다
3.다층 퍼셉트론의 실제
트레인 데이터 양
역전파 알고리즘은 트레이닝 데이터에서 구해지는 에러 값들로 가중치들의 값들을 찾는다.
은닉층의 수
은닉 노드들의 개수와 은닉층의 수 선택은 중요한 문제가 존재한다.
은닉층의 개수를 추가하던지, 하나의 은닉층에 많은 은닉노드를 사용하여 해결 가능하다.
학습 중지 시기
- 반복 횟수를 N으로 설정하는 것은 네트워크가 오버핏되거나 충분히 학습되지 못한 상황이 발생할 수 있다.
- 정해진 작은 에러 값에 도달하기까지 반복학습을 적용하면, 알고리즘이 멈추지 않거나 오버핏하는 위험이 생긴다.
따라서 순간 밸리데이션 데이터 셋의 에러가 증가하기 시작하면 네트워크가 데이터를 사용해서 이에 대한
함수를 학습하기 중단한다. 이는 노이즈에 대해서 배우기 시작하기 때문이다.
우리는 조기 종료(early stopping)을 사용하여 이 경우에 중다시킨다.
4.MLP 예제
예제 : 회귀 문제
예제 : 분류 문제(IRIS 데이터)
예제 : 시계열 데이터 처리
5.MLP 사용법
입력값 출력값 결정하기
어떤 피처를 사용하는 것이 문제에 적합한지 판단하고, 출력 값 인코딩을 정한다.
입력 데이터 정규화
데이터에서 평균 값을 빼서 이를 분산으로 나눈다.
데이터를 트레이닝, 테스팅, 밸리데이션 세트로 분리
트레이닝 테스팅 밸리데이션은 네트워크를 학습 시키고 트레이닝을 통해 얼마나 잘 학습했는지 사용한다.
네트워크 구조 정하기
네트워크 구조를 정하기 위해서 몇 가지 다른 수의 은닉 노드들을 사용하고, 가장 잘 동작하는 것으로 결정하는 방법을 사용한다.
네트워크 트레이닝 시키기
몇 번의 반복 후에 네트워크의 일반화를 밸리데이션에 적용해서 측정하는 조기 종료와 함께 진행된다.
네트워크 테스트
테스트 데이터를 이용하여 검사한다.
6.역전파 유도
네트워크 출력 값과 오류
- 현재 입력 값(X)
- 네트워크의 노드에 사용되는 활성화 함수 G(X)
- 네트워크의 가중치
가중치만 변경이 가능하고, 네트워크의 성능을 증가시키는데 이를 조절할 수 있다.
하지만 활성화 함수의 퍼셉트론에 사용된 임계(Threshold)함수는 미분이 가능하지 않다.
네트워크의 오류
기울기 하강방법을 원칙으로 오류를 줄여 나간다.
출력 y는 목표 값 t와 상관 관계가 존재하기 때문에
목표값과 출력값의 차이를 제곱하고 이것들의 합을 사용해서 에러를 계산하도록한다.
기울기 하강 알고리즘을 사용해서 E(w) 마이너스 기울기 방향으로 갱신한다.
활성화 함수 요건
- 기울기를 계산할 수 있도록 미분 가능
- 뉴런이 활성화 하든지 비활성화 할 수 있도록 양쪽 범위에서 수렴
- 수렴하는 양쪽 값의 중간에서는 꽤 빠르게 값이 바뀌어야한다.
오차 함수 대안
분류를 위해서는 출력 값이 다르고 독립적인 클래스들을 나타내야 하기에 활성화를 각각의 경우에
속할 확률로 생각해 볼 수 있다. 확률적인 표현 방법에 관해서는 정해진 가중치에 대해서
각각의 목표 값을 얼마나 가능성이 높은지 생각해야한다. 이는 우도(likehood)이며, 이를 최대화 시키는게
목표이다. 이를 통해 목표값을 잘 예측할 수 있다.
이런 우도를 최소화 함수로 표현하기 위해서는 앞에 음수 부호를 붙이며, 이를 통해 로그를 쉽게 취할 수 있는
크로스 엔트로피 오류(cross-entropy error) 함수를 만든다.
'DeepLearning > 머신러닝 - Algorithm' 카테고리의 다른 글
머신러닝 가이드 - Chapter 6 차원 축소 (0) | 2020.03.13 |
---|---|
머신 러닝 가이드 - Chapter 5 방사기저함수와 스플라인 (0) | 2020.03.10 |
머신러닝 가이드 - Chapter 3 Neural Network (0) | 2020.03.03 |
머신러닝 가이드 - Chapter 2 preview (0) | 2020.02.27 |
머신러닝 가이드 - Chapter 1 Intro (0) | 2020.02.25 |