achine Learning Basic - (theory)

모두를 위한 딥러닝 - 인프런 강의 를 보면서 공부한 내용을 정리합니다.

머신러닝이란?

  • explicit programming --> spam filter - ? so many rule(경우의 수가 많음)
  • 아서 사무엘 - 일일이 개발자가 지정하는 것이 아니라 학습을 통해 자동으로 결정

텐서플로우

data - flow graph

data = tensor : 3 dimension data

hello tensorflow

  1. 그래프를 빌드

  2. 세션 run -- tensorflow 2.0부터는 안만들어줘도 가능 -
    tensorflow - session

placeholder

임시 공간 - fedd_dict로 해당 값을 입력


현재 2.0부터는 placeholder를 사용하지 않고 함수로 지정을 해서 간결하게 처리 가능

참고블로그

@tf.function
def adder(a,b):
    return a+b

A = tf.constant(1)
B = tf.constant(2)
print(adder(A,B))

print(tf.add(A,B))

텐서 -rank shape - type

텐서플로우 공식문서

  • Rank

  • Shape
    각 차원 별로 몇 개의 데이터로 구성이 되어있는지를 표현


예를 들어서 3-D의 [2,3,3]의 shape을 가지는 자료는 다음과 같은 형태를 가지게 된다.

[
[[1,1,1],[2,2,2],[3,3,3]],
[[1,1,1],[2,2,2],[3,3,3]]
]

  • Datatype

constant를 만들때 dtype도 지정을 해줄 수 있다. 별도 지정이 없다면 implicit하게 tensorflow가 자동 지정

종류

  • regression : predicting final exam score => 75 score
  • binary classfication : pass/non-pass - > P/F
  • multi-label classification : Letter grade (A,B,C,D, F) -> A/B/C/D/F

Linear Regression

train data_set으로 학습(training)을 진행
추세선을 학습을 통해 그리는 과정

가설을 설정하는 것이 필요!
H(x) = Wx + b

그러면 여러가지 선 중에서 가장 적합한 선은 무엇일까

Cost function - Loss function
설정한 가설과 실제 데이터와의 차이를 측정
diff = (H(x)-y)^2

  • regression line과 실제 데이터의 차이는 양수 음수 둘다 나오는 것을 고려
  • 제곱된 값이라 차이가 크면 클수록 cost는 더 크게 됌

이 비용함수를 최소화하는 모델이 가장 좋은 모델!

min cost(W,b)

이 최소화되는 지점을 어떻게 찾을까?

gradient descent algorithm 경사하강법

  • 어떤 점에서나 시작해도 됌
  • 계속 W를 바꿔서 가장 최소화되는 지점을 찾음
  • 미분을 통해서 해당 cost function의 극한값을 찾으면 됌

미분을 하면 2가 계수로 내려와서 간단하게 만들어주기 위해 1/2m로 만들어줌.

주의점

cost function을 3차원으로 그려보면 다음과 같은 경우가 나올 수 있음

시작점에 따라서 비용함수를 최소화하는 지점이 달라지게 된다.

비용함수를 사용하기 전에 해당함수가 시작점에 상관없이 최종적으로 같은 지점을 향하는지를 확인할 필요가 있음

이때의 비용함수를 convex function이라고 한다. ( 밥그릇 형태의 모양)

Multi-variable linear regression


1차 regression 함수에서 확장

비용함수도 확장

이게 3차이상으로 가다보면 Matrix를 적용하는 것이 가시성이 좋음

이론상으로는 1차이지만 현실에서는 많은 변수가 작용하는 경우가 있기 때문에 행렬을 적용

Logistic Classification

분류에서 linear regresion이 부적합한 이유

y = 0.5x +b 라 했을 때

기준점 5 기준으로 합/불합격이 나뉜다고 데이터가 나옴

공부 시간이 100 시간인 사람이 있다고 가정

이 경우에는 출력값이 50이 되어서 1보다 엄청 크게 나온다 -> 기울기가 낮아진다.

합격인데도 불합격으로 인식

이 문제를 해결해야 함 -> logistic function 등장

Logistic

  • sigmoid

Logistic Cost Function

기존에 비용함수에 logistic 함수를 넣게 되면 구불구불한 함수가 나오게 됨 -> global minimum이 여러 군데 발생 -> gradient algoorythm 적용 불가

logistic -> e 상수 사용 -> 이걸 log를 시켜준다.

cost : 실제 데이터 - 예측치 간의 차이 ->

제대로 예측했다면 cost가 0에 가까워야 한다. / 예측을 잘못하면 cost가 무한대로 가게 된다.

프로그래밍을 할 때 편하게 하기 위해서 하나의 식으로


C(H(x),y) = - ylog(H(x)) - (1-y)log(1-H(x))
  • y = 1 ==> c = -log(H(x))
  • y = 0 ==> c = -log(1- H(x))

이제 경사하강법으로 cost minimize 값을 찾을 수 있음.

multinomial Logistic Regression

여러개의 클래스

binarty -> combine
A or not
B or not
C or not

행렬로 표현 가능

softmax classification

각 그룹에 대한 확률로 표현이 가능 -> 어느 그룹에 속할 확률이 높을지 알 수 있음

one hot encoding -> max값을 1로 선택

Cost function

cross entropy

Y = L = 실제값

Y^ = 예측값 - 두가지 경우

예를 들어 실제값이 B인데
B로 예측을 하면 비용이 0으로 맞는 예측
A로 예측을 하면 비용이 무한대가 되어서 틀린 예측

Application

Learning rate

overshooting

한 점에서 이동하는 step - 간격
만일 step이 너무 크다면 global minimum을 찾을 수 없을수 있다.

  • 0.01로 시작하고 발산이 되면 조금 작게 시도

Data preprocessing

데이터간의 차이가 큰 경우 학습이 제대로 안이루어질수도 있다.

이때는 정규화를 해주면 데이터가 응집되게 된다.

-> 성능 향상이 될 수 있다.

Overfiting

학습데이터에 너무 잘맞는 모델을 만들게 되어 학습데이터는 잘 설명하지만 새로운 데이터를 이용하는 경우 예측을 잘 못하는 경우가 발생한다.

solution

  • training data 늘리기
  • feature (변수) 줄이기
  • Regularization : 특정 feature에 가중치를 많이 부여하지 말자

regularization strength
1 -> 완전 고려
0 -> 고려 x

Training/ Testing Data

  • traing data - 학습에 사용
  • validation data - learning rate , regularization strength 조정하는 데 사용
  • testing data - 검증에 사용

online learning

100만개 데이터가 있다면 10만개씩 나눠서 학습.

다음 학습때 기존 학습한 결과를 포함

좋은 웹페이지 즐겨찾기