Skip to content

Latest commit

 

History

History
173 lines (89 loc) · 12.3 KB

3장.md

File metadata and controls

173 lines (89 loc) · 12.3 KB

최영윤 3장

<03-01 선형회귀>

y = ax + b

머신러닝은 x, y가 주어질 때 기울기(a)와 절편(b)을 구한다 (x는 입력, y는 타깃)

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__5.37.54.png

sklearn →예제데이터셋들을 포함한 머신러닝 라이브러리

보통 행-샘플, 열- 특성

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__5.56.23.png

<03-02 경사 하강법>

타깃과 예측값

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.03.26.png

만든 모델로 계산한 타깃 = 와이햇

입력, 타깃 데이터는 예제 데이터에 미리 준비됨. 이를 이용해 최적의 w, b 찾은 후 임의의 x 집어넣어 예측값을 얻음

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.09.05.png

실제 파이썬 코드로 만들기

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.11.16.png

1번~ 3번 과정

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.14.51.png

w값을 임의로 조정 후 결과값이 타깃 y와 가까워졌는지를 확인함

→ 타깃에 조금 더 가까워졌기 때문에 w 값을 증가시킨 것이 올바른 결정이라는 것을 알아냄

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.24.42.png

x[0]가 양수이냐 음수이냐에 따라 w를 증가시킬지 감소시킬지가 바뀔 수 있음

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__6.31.59.png

위 그래프는 w와 y_hat의 관계

w_rate = 음수 일 때→ w_new는 줄어듦

w_rate = 양수 일 때→ w_new는 늘어남

w_new = w + w_rate

고정된 값이 아니라 w_rate 방향대로 증가시킨다

같은 방식으로 절편도 업데이트하기

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.21.47.png

b의 변화율은 항상 1

w_new는 w변화율을 더하지만 b_new는 b+1로 설정한다

문제점

  • y_hat이 y에 한참 못미칠 때 w와 b를 더 큰 폭으로 수정 불가(변화율)

    → 큰 차이만큼 w, b도 비례해 바꿔야 함 (빠른 솔루션)
    
  • y_hat>y이 되면 y_hat 감소시키지 못함

    → w와 b를 감소시켜야 함 (y_hat, y 값에 능동적 대처)
    

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.41.08.png

w_new = w + w_rate * err 로 변경

err = y[0]-y_hat

  • err를 곱하면 y와 y_hat의 차이가 클 때 비례하는 가중치도 되고, y_hat을 증가시킬지 감소시킬지에 대한 방향성도 부호로 적용 가능

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.43.00.png

x[2], x[3], ... 모든 샘플 처리

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.49.40.png

for 문으로 전체 샘플 반복.

zip()는 튜플로 만들어 줌 (x, y)를 x_i, y_i에 적용해 반복

반복해서 구한 값이 587., 99.

scatter로 산점도 그리고, x가 -0.1 , 0.15일 때 y값 계산 후 직선을 그림

→ 타깃 값과의 관계를 어느정도는 표현 해준다

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.52.19.png

for문을 하나 더 써서 100번 더 수행 후 w, b 값 구함

똑같이 산점도에 직선을 그리면 더 산점도에 가까운 직선이 나옴

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__7.53.30.png

x에 특정 값 넣으면 예측값이 나온다

정리

  1. w와 b를 임의의 값(1.0, 1.0)으로 초기화하고 훈련 데이터의 샘플을 하나씩 대입하여 y와 y_hat의 오차를 구한다
  2. 1에서 구한 오차를 w와 b의 변화율에 곱하고 이 값을 이용해 w와 b를 업데이트한다
  3. 만약 y_hat>y가 되면 오차는 음수가 되어 자동으로 w와 b가 줄어드는 방향으로 업데이트된다
  4. 반대로 y_hat<y이면 오차는 양수가 되고 w와 b는 더 커지도록 업데이트된다

<03-03 손실 함수와 경사 하강법의 관계>

  • 손실 함수는 예측 값과 실제 타깃값의 차이를 측정한다
  • 손실 함수의 차이를 줄이는 방향으로 경사 하강법을 사용한다
  • 대표적인 회귀, 분류 등에서 널리 사용하는 손실 함수가 존재한다
  • 복잡한 다른 문제에서는 자신만의 손실 함수를 정의해 사용하기도 한다

제곱 오차

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.07.04.png

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.16.03.png

경사 하강법은 손실함수의 기울기가 작은 쪽으로 이동하는 알고리즘.

손실함수 값이 0이 되는 지점이 가장 최적의 솔루션이다

기울기가 낮아지는 쪽으로 이동해야 함 → 미분

y_hat = wx + b → w 함수이기 때문에 한번 더 미분했음

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.18.37.png

w가 점점 작아져야 하기 때문에 w에서 미분 값을 빼준다

03-02의 오차 역전파가 제곱오차를 미분한 것과 결과가 같다는 걸 알 수 있음

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.20.14.png

<03-04 선형 회귀를 위한 뉴런 만들기>

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.30.00.png

class ⇒ 변수와 메서드(함수)를 묶은 코드 덩어리

init ⇒ 초기화 하는 메서드 (클래스 이용해서 객체를 만들 때 가장 먼저 실행될 코드들)

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.32.44.png

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.35.10.png

후에 forpass 메소드 호출해서 y_hat으로 사용한다

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.43.28.png

y_hat 계산 후 오차를 계산하고, w를 변경하기 위해 -(y-y_hat)에 x를 곱해 최종적 그래디언트를 만든다 → w에 곱할 가중치

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.47.56.png

에포크 값 지정 안하면 자동으로 100 적용됨

Neuron 클래스

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.49.59.png

%E1%84%8E%E1%85%AC%E1%84%8B%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%B2%E1%86%AB%203%E1%84%8C%E1%85%A1%E1%86%BC%20a33d49c3ea5a47f6a2521a99e3f63167/_2021-01-14__8.51.29.png