아아... 스터디를 하면서 점점 게을러지는 나를 반복하게 된다. 죄송합니다 촌장님!
하지만 요즘 너무 바쁜걸...

이정도는 아니지만 바빠요 ㅠ

여튼 다시 본론으로 들어가서 4장에서 우리 혼공머신은 럭키백에서 생선이 나올 확률을 알려줘야 한다.
여기서 우리가 배웠던 알고리즘은 뭘까? 최근접 알고리즘이다.
즉 우리가 찍은 점 주변 근처의 친구들의 개수를 기준으로 비율을 정하는 것이다.
(이웃한 샘플 10개에서 빙어가 3개면 30퍼센트로 빙어일 확률임)


하지만 위 알고리즘은 어떠한 문제가 있다. 예를 들어 3개의 최근접 이웃일 경우 나올수 있는 확률의 수는
0/3, 1/3, 2/3, 3/3 뿐이다. 확률이 4가지뿐인건 조금 이상하다. 우리 세상은 연속적인 환경이지 않는가?!
그래서 우리는 연속적인 확률을 구하기 위해 로지스틱 회귀와 같은 모델을 사용한다!

세상은 연속적인 것!


우리 혼공머신은 문제를 해결했다고 뿌듯했으나 생선 데이터는 고정이 아니란 점도 현실세계와 다른점이다.
생선가게에는 항상 새로운 생선의 데이터가 들어올 것이고(생선이 잡히니까!) 기존의 모델로는 새로운 데이터에 대한 확률을 알려주기가 곤란할 것이다.

나는 새로운 데이터를 설명할 모델이 없다굿!

그렇다면 우리가 생각할 수 있는 방법은 여러가지가 있겠지만 가장 쉽게 해볼 수 있는 생각은 이것이다.
처음부터 모든 데이터를 다시 학습하는 것이다! 그러면 만사해결이지 암암!

하지만 새로운 데이터가 들어올때마다 학습해야 한다면? GPU 녹는 소리 살살 들리네!
위 방법은 상당히 비효율 적이다. 데이터를 학습하는 시간도 그렇고 학습때 사용하는 컴퓨팅도 그렇고 모든것이 낭비다!

그렇다면 이문제를 해결할 수 있는 방법은? 경사 하강법이라는 방법이 있다.
즉 기존 데이터를 기반으로 생성한 모델은 그대로 두고 새로운 데이터를 기반으로 학습하고 기존 모델을 업데이트 하는 방식이다.
여기서 어쩔수 없이 익혀야 하는 개념이 있는데 에포크, 경사하강법 종류로 확률적 경사 하강법, 미니배치 경사 하강법, 배치 경사 하강법이 있다. 

[에포크]
새로 들어온 데이터에 대한 학습을 몇번할 것인지에 대한 것이다. 학습을 한번만 시킬지 여러번 시킬지다. 신기하게도 에포크 수를 늘리면 어느순간까지는 정답을 맞출 확률이 올라간다.(정말 신기하다!) 그렇다고 에포크 수를 막 늘리면 어느 순간 과대적합되어 모델 성능이 떨어진다!

[배치 경사 하강법]
데이터 세트에서 모든 데이터를 꺼내서 한번에 학습시키는 방식이다. 이렇게 되면 메모리에 모든 데이터를 올려야 하기 때문에 메모리 용량이 매우 중요해 진다.

[미니 배치 경사 하강법]
데이터 세트에서 일부만 꺼내서 학습시키는 방식이다.

[확률적 경사 하강법]
1개씩 꺼내서 학습시키는 방식이다. 

여기서 생각해보면 학습 속도는 누가 제일 빠를까? 배치 경사 하강법이다. 전체데이터를 한번에 학습시키니 아무래도 빠르겠지? 제일 느린건? 확률적 경사 하강법이다. 하나씩 꺼내서 학습하기 때문에! 느리다. 하지만 좀 더 정밀하게 최적점을 찾을 수 있다.

[손실함수 = 비용함수]
타겟 값과 모델이 얼마나 차이나는지 계산해주는 함수다. 즉, 이 함수를 가지고 다시 모델을 평가할 수 있다!

으아아~ 시간이 정말 빠른것 같다.
그래도 이번챕터는?

 

할만하네!

 

+ Recent posts