Skip to content

Aiden-Kwak/Software-Practical-Use-and-Coding-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Software-Practical-Use-and-Coding-ai

deep learning part

#0
Linear Regression, Logistic Regression.
가장 훌륭한 예측선 긋기란 Linear Regression을 쉽게 풀어쓴것. 머신러닝은 제대로 된 선긋기에서 시작된다.
*gradient decent
로지스틱회귀에선 sigmoid function을 조정. 이때도 경사하강법 통해서 a,b구함.
만약 입력값이 추가되어 세개이상의 입력값을 다룬다면 시그모이드가 아니라 softmax function 써야한다.

#1
perceptron: 입력값과 활성화 함수를 사용해 출력값을 다음으로 넘기는 가장 작은 신경망 단위 y=ax+b를 퍼셉트론에 맞춰 뭔가 딥러닝스럽게 표현해보면 a는 가중치(weight), b는 바이어스(bias), y는 입력값(x)와 가중치의 곱을 모두 더한다음 바이어스를 더한 값인 가중합(weighted sum)이다.
가중합의 결과를 놓고 1 또는 0을 출력해서 활성화함수(activation function)으로 보낸다. 대표적으로 시그모이드 함수

  • 퍼셉트론의 한계: XOR problem
    XOR 문제를 해결하기 위해서 2개의 퍼셉트론을 한번에 계산할 수 있어야함.
    이를 가능하게 하려면 은닉층(hidden layer)만들면 됨. -> 다중 퍼셉트론// 뭔가 신경망을 닮아서 neural network라 부름.

#2
오차 역전파(back propagation): 신경망 내부의 가중치 수정방법// 경사하강법 확장개념임.
임의의 가중치를 선언하고 결과값을 이용해 오차를 구한뒤 이 오차가 최소인 지점으로 계속 이동해서 조금씩 가중치를 이동시킴
이 오차가 최소가 되는점(미분했을 때 기울기 0지점)을 찾으면 그게 찾고자하는 가중치임.
백 프로파게이션은 출력층으로부터 하나씩 앞으로 되돌아가면서 각 층의 가중치를 수정하는데 가중치를 수정하려면
미분 값(기울기)가 필요한데 시그모이드 함수를 생각해보면 문제가 발생함 -> 기울기소실(vanishing gradient)
시그모이드 함수 미분하다보면 점점 기울기가 0에 가까워지니까 가중치 수정이 어려워짐. 그래서 다른 활성화함수로 대체.
예를 들어 렐루함수.

#3
고급경사하강법
가중치를 업뎃하는 경사하강법은 정확하게 가중치를 찾아가기는 하는데 한번 업뎃할때마다 전체 데이터 미분해야해서 계산량이 매우 많음.
이거 보강하기 위해 고급경사하강법.

  1. 확률적 경사하강법. 전체데이터 안쓰고 랜덤하게 추출한 일부 데이터만 사용.
  2. 모멘텀. 경사하강법이랑 똑같이 매번 기울기를 구하는데 대신 이를 통해서 오차를 수정하기 전에 바로앞의 수정값과 방향(+,-) 참고해서
    일정 비율만 수정되게한다. 수정방향 지그재그로 되는 현상 줄어들고 이전 이동값 고려해서 일정비율만큼만 효과를 낼 수 있음.

#4
Sequential 함수는 딥러닝의 구조를 한층 한층 쉽게 쌓아올릴 수 있게함.
Sequential 함수 선언 후 케라스의 model.add() 함수 사용해 필요한 층을 차례로 추가하면 됨.
케라스의 장점 중 하나는 model.add() 함수를 이용해 필요한 만큼의 층을 빠르고 쉽게 쌓을 수 있다는 것.
model.add() 안에는 Dense() 함수가 포함되어 있다. -> 각 층이 각각 어떤 특성을 가질지 옵션을 설정하는 역할.
딥러닝의 구조와 층별 옵션을 정하고 나면 compile()함수를 이용해 이를 실행시킴.

  • loss, optimizer, activation
    블랙박스를 극복하려면?

#5
과적합(overfitting)
층이 너무 많거나 변수가 복잡해서 생기기도 하고 학습 데이터셋과 테스트 데이터셋 구분하지 않고
딥러닝했을때 발생하기도 함.
방지하기 위해선:
-홀드아웃 교차검증(Holdout Cross Validation)
데이터셋을 학습데이터셋과 validation에 해당하는 테스트 데이터셋으로 나누어 사용하는 것
30%정도의 테스트 데이터셋을 가지고 실행되었던 딥러닝 모델을 기반으로 딥러닝 모델을 테스트한 후 정확도(accuracy) 계산.
향후 예측위해서 학습에 사용안한 테스트 데이터셋을 만들어 정확한 평가 병행하는게 매우 중요.

  • 과적합 확인 방법
    학습데이터셋만 가지고 딥러닝할 때 층 더하거나, epoch값을 높여 실행횟수를 늘리면 정확도 계속해 올라갈 수 있음
    이 경우 학습이 깊어져서 학습데이터셋 내부에서의 성공률은 높아지는데 테스트데이터셋에서 효과가 없다면 오버핏일어나는거임.
    정리하면 학습량이 늘어나면 학습데이터셋 통한 예측률은 계속 올라가지만 테스트데이터셋 이용한 예측률은 오히려 떨어진다.

학습계속해도 더이상 테스트 결과가 좋아지지 않으면 그 지점에서 학습 멈춰줄 필요가 있음,

  • 홀드아웃교차검증했을때 문제:
    홀드아웃교차검증하면 데이터중 70%를 학습데이터셋으로 쓰고 테스트데이터셋은 겨우 30%임. 이정도 테스트만으론 실제로 얼마나 잘 작동하는지 확인이 어려움.
    테스트데이터셋 어떻게 잡는지에 따라 성능이 달라지고 우연의 효과로 인해서 모델 평가지표에 편향이 생길거임.

#6
K-겹 교차검증(K-fold Cross Validation): 홀드아웃교차검증의 단점보완
모든 데이터가 최소 한번은 테스트 데이터셋으로 쓰이도록 한다. 데이터를 K개 그룹으로 나누어 하나씩 교차해가면서 테스트 데이터셋으로 쓰는것.
모든 데이터를 학습 데이터셋과 validation위한 테스트 데이터셋으로 쓸 수 있고 오버핏도 해결가능. 다만 딥러닝이 오래걸림

학습자료 참고: http://archive.ics.uci.edu
머신러닝 공부할때 쓸만한 각종 데이터

About

deep learning part

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published