과대적합(Over fitting) 과소적합(Under fitting)

 

머신러닝에서 학습과정은 패턴을 발견하기 위해 모델링을 만드는 단계라고 있다. 일반적으로 모델을 만들 때에는 데이터를, 트레이닝 데이터 (training) 테스트 데이터(test) 나누어 사용한다.  트레이닝 데이터를 반복적으로 학습함으로써 테스트 데이터 또는 실제 데이터와 가장 유사한 결과를 만들어 내는 것을 목표로 하고 있다.

하지만 트레이닝 데이터와 테스트 데이터가 비슷하다면 모델의 정확도는 매우 높게 나올 것이다. 하지만 모델이 복잡하다면 트레이닝 데이터와 테스트 데이터의 결과는 다르게 나타날 확률이 높다. 일반적으로 트레이닝 데이터는 실제 데이터를 샘플링 하거나 특정 패턴을 인식시키기 위한 데이터로 트레이닝 데이터에 최적화 되어있으면 실제 데이터에서 오차가 발생할 확률이 크다. 그래서 트레이닝 데이터에 대해서는 높은 정확도를 나타내지만 새로운 데이터에 대해서 예측을 하지 못하는 것을 과대적합(Overfitting )이라고 하며, 반대로 트레이닝 데이터 조차도 정확한 결과를 도출하지 못하면 과소적합(Underfitting)이라고 한다. 과대적합과 과소적합 사이에서 최적화된 절충점을 찾아 모델을 만드는 것이 매우 중요하며 트레이닝 데이터에서 생성된 모델이 일반 데이터에 대해 정확하게 예측되는 모델을  일반화(Generalization) 되었다라고 한다.

 

아래 그림은 과소적합(Under fitting) 과대적합(Over fitting) 이해를 돕기 위해 그림으로 나타낸 것이다.  과소적합의 경우 데이터를 충분히 반영하지 못해(샘플 개수가 충분하지 않는 경우)  잡음이 많이 섞여 있으며, 과대적합의 경우 불필요한 잡음(noise) 과도하게 모델링에 반영한 상태이다. 우리는 어느정도 오류(noise) 허용할지 결정하면서 최적의 모델 값을 도출해야 한다.

 

 

과대적합이나 과소적합의 문제를 최소화하고 정확도를 높이는 가장 좋은 방법은 많고 다양한 데이터를 확보하고, 데이터에서 다양한 특징(feature)들을 찾아서 학습에 사용하는 것이다. , 트레이닝 데이터에 따라, 생성된 모델의 정확도가 결정되므로 트레이닝 데이터 세트를 만드는 것이 중요하다.

 

 

 

[참고자료]

https://brunch.co.kr/@gimmesilver/44

https://ko.d2l.ai/chapter_deep-learning-basics/underfit-overfit.html

 

 

2020-03-18/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning, 과대적합, 과소적합, Over fitting, Under fitting

경사 하강법(Gradient Descent)

 

경사 하강법(Gradient Descent) 머신러닝 딥러닝 알고리즘을 학습시킬때 사용하는 방법 하나이며 1 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사) 구하여 기울기가 낮은 쪽으로 계속 이동시켜 극값(최적값) 이를 때까지 반복하는 것이다.

 

 

해당 함수의 최소값 위치를 찾기 위해 비용 함수(Cost Function) 경사 반대 방향으로 정의한 Step Size 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾으려는 방법이다. 여기에서 경사는 파라미터에 대해 편미분한 벡터를 의미하며 파라미터를 반복적으로 조금씩 움직이는 것이 관건이다.

 

 

경사 하강법에서는 학습시 스텝의 크기 (step  size) 중요하다. 학습률이 너무 작을 경우 알고리즘이 수렴하기 위해 반복해야 하는 값이 많으므로 학습 시간이 오래걸린다. 그리고 지역 최소값(local minimum) 수렴할 있다. 반대로 학습률이 너무 경우 학습 시간은 적게 걸리나, 스텝이 너무 커서 전역 최소값(global minimum) 가로질러 반대편으로 건너뛰어 최소값에서 멀어질 있다.

 

경사 하강법에도 약점이 있다. 경사 하강법은 현재 위치에서의 기울기를 사용하기 때문에 지역 최소값에 빠질 있다. 또한 무작위 초기화(random initialization) 인해 알고리즘이 전역 최소값이 아닌 지역 최소값에 수렴할 있다. 또한 평탄한 지역을 지나기 위해서 시간이 오래 걸리고 일찍 멈추어서 전역 최소값에 도달하지 못할수도 있다.

 

이와 같은 문제점을 해결하기 위해 사용하는 방법이 모멘텀이다. 쉽게 말해 기울기에 관성을 부과하여 작은 기울기는 쉽에 넘어갈 있도록 만든것이다. , 공을 예로 들면 언덕에서 공을 굴렸을때, 낮은 언덕은 공의 관성을 이용하여 쉽게 넘어갈 있게 하여 지역 최소값을 탈출 있게 한다는 뜻이다.

 

모멘텀을 사용하지 않으면 아주 작은 언덕에도 빠져나오지 못할 있으며 기울기가 매우 작은 구간을 빠져나오는데에는 아주 오랜 시간이 걸린다.

 

경사 하강법은 전체 데이터를 모두 사용해서 기울기를 계산(Batch Gradient Descent)하기 때문에 학습하는데 많은 시간이 필요하다. 만약 10만개의 데이터가 있을때, 데이터에 업데이트가 있을 마다 10만번의 계산을 해야한다. 그래서 학습 데이터가 경우 부담이 있다. 이러한 느린점을 보완하기 위해서 확률적 경사 하강법(Stochastic Gradient Descent) 사용한다. 방법은 step에서 한개의 샘플을 무작위로 선택하고 하나의 샘플에 대한 기울기를 계산한다. 확률적 경사 하강법은 아래와 같은 특징이 있다.

·       매우 적은 데이터를 처리하기 때문에 학습 속도가 빠름

·       하나의 샘플만 메모리에 있으면 되기 대문에 데이터셋도 학습이 가능

·       Cost function 매우 불규칙할 경우 알고리즘이 local minimum 건너뛰도록 도와주어 global minimum 찾을 가능성이 높음

·       샘플이 선택이 확률적(Stochastic)이기 때문에 배치 경사 하강법에 비해 불안정

·       Cost function local minimum 이를때 까지 부드럽게 감소하지 않고 위아래로 요동치며 평균적으로 감소

 

 

이외에도 Mini-batch Gradient Descent  방식이 있다. 방식은 임의의 작은 샘플세트에 대해 gradient 계산하여 SGD(Stochastic Gradient Descent) 비해 matrix 연산에 최적화되어 있으며 파라미터 공간에서 불규칙하게 학습한다. 하지만 local minimum 빠지면 빠져나오기 힘든 단점이 있다.

 

 

[참고자료]

·       https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95

·       https://m.blog.naver.com/PostView.nhn?blogId=2011topcit&logNo=220563609607&proxyReferer=https%3A%2F%2Fwww.google.com%2F

·       https://jaehyeongan.github.io/2019/04/23/%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95-Gradient-Descent/

·       https://bskyvision.com/411

 

 

 

2020-03-15/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning, 경사 하강법, Gradient Descent, 경사 감소법

순전파(Feedforward) 역전파(Backpropagation) 개념

 

다층 퍼셉트론(Multi-layer Perceptron, MLP)으로 학습 한다는 것은 최종 출력값과 실제값의 오차가 최소화 되도록 가중치와 바이어스를 계산하여 결정하는 것이다. 순전파 (Feedforward) 알고리즘 에서 발생한 오차를 줄이기 위해 새로운 가중치를 업데이트하고, 새로운 가중치로 다시 학습하는 과정을 역전파 (Backpropagation) 알고리즘 이라고 한다. 이러한 역전파 학습을 오차가0 가까워 때까지 반복한다. 역전파 알고리즘을 실행할때 가중치를 결정하는 방법에서는 경사하강법이 사용된다.

 

[순전파 (Feedfoward)]

입력층에서 은닉층 방향으로 이동하면서 입력에 해당하는 가중치가 곱해지고, 결과적으로 가중치 합으로 계산되어 은닉층 뉴런의 함수 (일반적으로 시그모이드(Sigmoid) 사용) 입력된다. 그리고 최종 결과가 출력된다.

 

 

[역전파 (Backpropagation)]

역전파 알고리즘은 input output 값을 알고 있는 상태에서 신경망을 학습 시키는 방법이다. 방법을 Supervised learning(지도학습)이라고 한다. 초기 가중치, weight 값은 랜덤으로 주어지고 각각 노드들은 하나의 퍼셉트론으로, 노드를 지날때 마다 활성함수를 적용한다.

 

역전파 알고리즘의 수식은 아래와 같다.

·       target : 출력의 기대

·       output : 실제 출력

·       E : 오차

 

 

역전파 알고리즘도 한계점은 있다. 은닉층에서 시그모이드(Sigmoid) 함수를 사용하면 가중치 조정을 위해 경사감소법을 사용하는데, 계단형식 함수를 미분가능하도록 곡선화 한다. 은닉층이 깊어질 수록 가중치가 0으로 수렴하며 정확성이 감소한다. 이러한 역전파 알고리즘의 문제점을 해결하기 위해 ReLu 알고리즘을 사용한다. ReLu x 값이 0이하이면 0 출력, 0 이상이면 비례함수를 적용하여 max(0,x) 함수를 사용한다.

 

 

[참고자료]

·       https://wikidocs.net/37406

·       https://ko.wikipedia.org/wiki/%EC%97%AD%EC%A0%84%ED%8C%8C

·       https://sacko.tistory.com/19

·       https://m.blog.naver.com/samsjang/221033626685

·       https://goofcode.github.io/back-propagation

·       https://gomguard.tistory.com/182

 

 

 

2020-03-14/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning,다층 퍼셉트론, Multi-layer perceptron, 역전파, 순전파 , Backpropagation, Feedforward

  1. 진우 2022.04.29 14:17

    opencv dnn 은 순전파만 지원하기 때문에 별도의 학습데이터 weight, bias 값을 가져와서 사용한다고 알고있는데

    실시간 동영상의 각 프레임마다 일일이 학습하는게 시간이 너무 오래걸려서 그런건가요?

다층 퍼셉트론 (Multi-layer Perceptron)

 

퍼셉트론은 사람 뇌의 단일 뉴런이 작동하는 방법을 흉내내기 위해 환원 접근법 (reductionist approach) 이용한다. 방법은 초기 가중치를 임의의 값으로 정의하고 예측값의 활성 함수 리턴값과 실제 결과값의 활성 함수 리턴값이 동일하게 나올 때까지 가중치의 값을 계속 수정하는 방법이다.

 

단층 퍼셉트론의 경우 AND, NAND, OR 논리회로를 계산할 있지만 XOR 게이트 연산을 없다. XOR 게이트는 베타적 논리합 이라 불리는 회로이다. 뜻은 한쪽이 1 때만 1 출력한다

퍼셉트론 이론은 선형 분류이다. 직선을 이용한 분류는 가능하지만 XOR 게이트와 같은 경우 곡선으로 나눌 있기 때문에 비선형 분류이다.

 

이러한 제약사항을 보완하기 위해 나온것이 다층 퍼셉트론 (Multi-layer Perceptron, MLP)이다. 단층 퍼셉트론과 다층 퍼셉트론의 차이점은 단층 퍼셉트론은 입력층과 출력층만 존재하지만, 다층 퍼셉트론은 중간에 층을 추가하였다. 이렇게 입력과 출력 사이에 추가된 층을 은닉층(hidden layer)이라 한다. XOR 게이트는 기존의 AND, NAND, OR 게이트를 조합하여 만들 있기 때문에 퍼셉트론에서 층을 계속 추가하면서 만들 있다. 이렇게 층을 여러겹으로 쌓아가면 선형 분류만으로 풀지 못했던 문제를 비선형적으로 있게 된다.

 

 

다층 퍼셉트론은 은닉층이 1 이상인 퍼셉트론을 의미한다. 은닉층이 2개일수도 있고 수십, 수백개 일수도 있다. 아래 그림과 같이 은닉층이 2 이상인 신경망을 심층 신경망 (Deep Neural Network, DNN)이라고 한다.  학습을 시키는 신경망이 심층 신경망일경우 심층 신경망을 학습시칸다고 하여 딥러밍(Deep Learning)이라고 한다.

 

 

 

[참고자료]

·       https://en.wikipedia.org/wiki/Multilayer_perceptron

·       https://wikidocs.net/24958

 

2020-03-12/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning,신경망, 뉴럴 네트워크,퍼셉트론, Perceptron, 다층 퍼셉트론, Multi-layer perceptron

+ Recent posts