본문 바로가기

cs,코딩,알고리즘/생활코딩(머신러닝기초)

코딩애플-텐서플로우 딥러닝 기초(1)

728x90

머신러닝

1. 머신러닝: 기계한테 학습시키는 모든 것

ex)스팸메일 몇만개를 검토해서 어떤 제목이 스팸인지 확인

2. 종류 : supervised learning/ unsupervised learning: 유사도로 분류(군집화)->영화추천, 옷추천의 알고리즘/ reinforce learning

3. 학습과정은 요로코롬==>가중치에 대한 변수를 찾게끔 시키는 것

w1,w2의 기준을 세우기 위해 데이터를 주면됨. 이때 오차값이 최소화되는 w값을 찾으면 됨

 

뇌를 본딴 뉴럴네트워크 (이러면 컴퓨터가 사람처럼 생각하겠찌?)

좀 더 정교한 예측을 위해 인간의 뇌 동작 방식을 따온게 뉴럴 네트워크.(뉴런이 연결된 형태마냥 중간에 사고과정을 더했다고 생각하면 편하다)

여기있는 hidden layer이 중간 사고과정

 

전통 머신러닝은 사람이 가이드를 제공했었음(뭐가 타이어고 문짝이고..등등) 근데 딥러닝은 컴퓨터가 알아서 분류해(다만 데이터가 쬐에끔 더 필요하겠지)

 

손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함

오차를 최소화하는 방향으로 w값을 찾으라고 시키는 것이 머신러닝, 이때 컴퓨터한테 오차가 뭔지, 어떻게 계산해야하는지 입력해줘야해

=>loss function: 모델의 정확도를 평가하기 위해 오차를 구하는 수식

예측값-실제값=오차 제곱의 평균

활성함수가 없으면 뉴럴네트워크가 아님 (Activation Function)

3강까지 어마어마한 결함이 있다고 한다. hidden layer가 있든 없든 결과가 똑같았다는 것

그걸 해결하기 위한 것이 활성함수

이 h1을 짜부라뜨리는? 수식이 활성함수

이를 통해 비선형적으로 복잡한것도 예측이 가능하다고 한다

앞부분 간단 정리

성적이 있으면 각각 연결된 노드들로 값을 내(그게 h1)->h1을 바로 쓰는게 아니라 활성함수같은 거에 넣어서 짜부 만들어-> 짜부 만든 값을 또 각 노드들로 계산해서 예측값을 내면 되는 거임. 그 예측감과 실제값의 오차를 최소화하는 w를 찾으면 정확한 모델이 나온다!!

 

그 오차를 최소화하는 w를 찾는 법이 바로 경사하강법

신나는(?) 경사하강법

w값을 일단 랜덤으로 하나 찍고 그래프 그려가면 판단 가능. but 우리가 하는 딥러닝은 그림도 못그림

그래서 나타난 경사하강법: w값 하나 찍고 그 값을 증가시킬지 감소시킬지 판단하는 기준. 경사를 타고 하강하면 됨

->현재 w1값에서의 접선의 기울기를 w1을 뺄 것(음.. 그 값에서 미분한 값을 빼도되나..?.....멍청...)

기울기가 양수이면

수식까지 정리하면 하기 싫어질 거 같아서.. 생략..^^..

대충 새로운 w1값을 찾고 싶으면 기존 w1값에서 w1이 최종 손실에 얼마나 큰 영향을 끼치는가를 빼주면 됨.

 

결국 머신에게 러닝을 시킨다

=손실을 최소화하는 w값을 찾게 시킴(이때 방법이 경사하강이라는 거임)

딥러닝 학습 과정
1. w값을 랜덤으로 찍고
2. w값을 바탕으로 총손실 E를 계산
3. 경사하강법을 통해 새로운 W값을 업데이트 시켜

파이썬으로 하면 이런 느낌(for반복문!)

BUT,, 밑의 그림처럼 기울기가0이어도 최저점이 아닌 경우도 있음

해결책 : local minima- 기울기만 빼지 말고 Learning rate*기울기를 뺄 것 

-> 기울기를 팍팍 줄여서 가짜 최저점을 뛰어넘을 수 있음(이떄 learning rate는 trial&error를 통해 실험적으로 정해야해)

 

Learning rate optimizer- 고정값을 두면 학습이 느리거나 학습이 안일어나는 경우도 있음. 그래서 가변적으로 수정을 통해 최적화를 계속 해줘야함

 

음 사실 기울기라기보단 편미분,,이라고 한다..허허