[Do it! 딥러닝 입문] 스터디 2차

2019. 10. 23. 08:27카테고리 없음

실로 도움이 많이 되었음

처음으로 딥러닝 '구현' 을 할 수 있겠다고 생각함

자세한 내용은 아래 정리하겠음.

*연대 대학원 지원전에 'do it 딥러닝 입문' , '서울대학교 빅데이터연구원 강의' 기타 강의/컨퍼런스 정리 + 책 정리

 

지난주 1-3장 기본적인 내용 살펴봤다

경사하강법을 직관적인 법으로 코드를 만들어 회귀 문제를 풀어보았고

수학적으로 최소제곱, 손실함수를 미분해서 경사하강법을 찾아가는 과정을 수행해보았더니

두 방법이 같은 결과가 나왔다.

 

우리가 알고있는 타겟값이랑 예측값을 빼고. 거기다가 입력값(가중치의 변화율)을 곱해서 그라디언트 업데이트 하면 된다.

 

4장. 숫자를 예측하는 회귀문제를 종류를 분류하는 분류 문제로 바꾸어서 해보겠다.

5장. 머신러닝 전반에 걸쳐 꼭 알아야 할 개념들을 짚고 넘어간다

6장. 하나의 뉴런에서 뉴런의 갯수를 늘려가며 복잡한 구조를 유도해보겠다..

 

4장부터는 수식이 많이 나오는데, 자세히 보면 별거 아님.

 

 

 

4  분류하는 뉴런을 만든다

- 이진 분류 binary classification

 

- 분류는 여러개를 분류하는 것(다중 분류)이 있고, 두가지로만 분류하는 것(이진 분류)도 있다.

 

회귀를 하나의 뉴런이라고 표현했는데.

 

4-1 초기 인공지능 알고리즘과 로지스틱 회귀

- 이진 분류는 True(1) / False(0 or -1) 로 구분하는 문제

- 퍼셉트론 Perceptron : 1957년 프랑크 로젠블라트

여기서 z 는 예측값. 어떤 임의의 숫자 예측.

이진분류는 어떤 임계값보다 크면 True (참/양성) 작으면 False (거짓/음성)

임계값 정하는것은 정하기 나름인데, 퍼셉트론에서는 계단함수.

0보다 크면 1. 0보다 작으면 -1.

데이터 셋도 1 아니면 -1 (True or False)로 준비가 되어있어야 할 것이다. 

보통 머신러닝 알고리즘은 1, 0 으로 많이 표현함.

텐서플로, 사이킷런..

하지만 계산의 편의성을 위해서 내부적으로는 1 또는 -1을 계산하는 알고리즘도 있다.

사용자는 타겟값을 1, 0으로 주지만.

알고리즘은 타겟값을 1, 0 을 1, -1로 바꿔서 계산한다.

(겉으로 드러나기론 1, 0 을 데이터셋으로 준비하면 된다)

 

퍼셉트론 알고리즘은 z 가 0보다 크면 1/True/참/양성 클래스 0보다 작으면 -1로 분류한다.

 

 

z값의 부호를 보고 타겟값을 결정하기 때문에 y^(와이햇)을 쓰지 않고, z을 쓴다.

 

 

퍼셉트론과 아달린의 차이는

퍼셉트론은 역방향 계산. 타겟값과 예측값의 차이를 빼서 업데이트 했는데, 기준이 계단 함수를 지나서 업데이트.

아달린은 똑같은데 계단함수 전에 업데이트를 한다는 점만 다름.

 

로지스틱 회귀나 기본적인 분류알고리즘들은 아달린과 유사한 면이 있다.

퍼셉트론이라는 말이 유명해서 더 많이 사용함.

 

로지스틱 회귀는 분류 알고리즘이고.. 3장에서 봤던 회귀는 리그레션이라고 하는데.. 회귀는 특별한 뜻이 있는게 아니라..숫자를 예측하는 것이라고 하였다.

로지스틱 회귀는 회귀 알고리즘을 살짝 바꿔서 분류에 사용하는 것이다. 숫자를 예측하는 알고리즘이 아니고 몇개의 클래스 중에 하나를 고르는 분류 알고리즘이다. 

로지스틱 회귀가 아달린과 다른 것은. '활성화 함수'라고 한번 비틀어주는 함수를 둔다. 비선형적으로 비틀어주고 , 그 값을 가지고 역방향 계산을 한다. 임계 함수에서 T/F 클래스 나누는 것은 동일.

로지스틱 회귀는 0.5보다 크면, 양성 클래스. 0.5보다 작으면 음성 클래스로 예측한다.

0.5보다 크면 ? 0.5와 같거나 크면?  기준이 있는 것은 아니나, 대부분은 작거나 같으면 음성 클래스로 한다.

 

로지스틱회귀는 활성화 함수에서 시그모이드 라는 함수를 사용한다.

그래서 활성화 함수를 이용해서 z값을 변형해주고, 변형한 것을 가지고 표현을 해야하기 때문에 a라는 문자로 표현하겠다.

 

 

비선형 함수를 이렇게 쓰는 이유는? 비선형함수를 쓰지 않고, 곱셈이나 덧셈 여러개 넣더라도

분배법칙 등 이용하면 하나로 만들 수 있다. 그러면 뉴런을 여러개 넣는 효과가 없다.

그래서 중간중간에 비선형함수를 두어야만 복잡한 함수를 학습할 수 있다.

z는 선형방정식 값이고, 활성화함수를 거쳐서 a값을 계산할 때. a값은 0에서 1까지 나오는 귀결되도록 한다.

확률로 해석하기 편함.

가지고 있는 데이터셋이  양성클래스일 경우 0.5보다 크게, 음성클래스일 경우 0.5보다 작거나 같게 가중치를 학습하는 것이다.

그러면 나중에 학습이 다 끝나면, 새로운 데이터를 넣었을 때. 값이 0.5보다 크게 나올 것이다. 

 

 

 

 

 

 

 

 

회귀는 우리가 예측한 것과의 차이를 구해야하니까 절대값을 써도 되고, 제곱오차를 써도 되고.. 상식적으로 이해할 수 있는 기준이 있는데

 

분류는 목표가 정확도이다. 많이 맞추는 것인데.. 양성 클래스를 양성 클래스로 맞추는 것인데, 수학적으로 카운트 할 수 없고

미분에 경사하강법을 쓰려면 문제에 봉착한다.

이런 분류의 경우, 정확도를 할 수 없으니까

다른 

정확도가 올라가겠지

 

 

 

 

 

 

미분을 유도하는 과정 

--> 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

우리가 찾으려고하는 대상이 악성 종양이 True class이다. Positive class가 긍정적인 것을 의미하는 것이 아니라.

찾으려는 대상. 타겟값을 1로 둔 것이 Positive class이다.

 

t