동에 번쩍, 서에 번쩍

[스파르타 코딩클럽] 가장 쉽게 배우는 머신러닝 3주차 개발일지 본문

다오니의 소소한 일상👀/스파르타 코딩클럽

[스파르타 코딩클럽] 가장 쉽게 배우는 머신러닝 3주차 개발일지

dayonits2 2021. 6. 29. 00:26

 

2주차 개발일지를 올린지

4시간 만에 올리게된 3주차 개발일지...ㅠㅠ

종강을 너무 만끽한 탓에 수업을 밀려버려

진도 사우르스에게 잡히고 말았도다 허허

사실 겟레디윗미 참가기념 굿즈도 한참전에 받았는데

포스팅도 아직 안함 ㅎㅎㅎㅎ

우선 밀린 강의 수강하고 차차 올리도록 하겠다..!

 

 

 

 

3주차에는 딥러닝에 대해 학습했다.

전공수업때 들었던 머신러닝 과목은 전반적인 이론에 대해

자세하게 배우느라, 인공지능 과목은

파이썬 기초부터 회귀와 분류에 대해 집중하느라

신경망 부분에 대해서 실습과 과제는

별로 진행되지 않았기에

딥러닝에 대해서는 구현을 해보지 않아

아쉬움이 있던 영역이었다!

(진행됐다해도 컴퓨터가 못따라왔겠지만 ㅎㅎ;)

 

 

 

 

그래서 3주차는 더욱 더 꼼꼼히 들었던 것 같다!

(그렇다고 1, 2주차 수업 대충 들은 것은 아님X!!)

튜터님도 실무에서 사용하는 모든 것을

강의자료에 녹여내기 위해서 딥러닝 관련

강의자료에 대해 엄청 준비하셨다고 말씀하셨는데

그림자료부터 이것저것 구성이 알찼다!

 

 

 

 


1. 딥러닝의 역사

                                         출처 : [가장 쉽게 배우는 머신러닝] 강의자료

앞서 2주차에서 나왔던 로지스틱 회귀처럼

실제 자연계에는 선형으로 풀 수 있는 문제들이

많지 않았고 처음에는 위 사진처럼 선형회귀를 여러번

반복해서 풀이를 진행했다고 한다.

 

 

 

 

                                         출처 : [가장 쉽게 배우는 머신러닝] 강의자료

하지만 선형회귀를 반복한다고 해서

비선형의 특성을 갖는 것은 아니기에 반복되는

선형회귀 사이에 비선형의 무언가를

넣어야 한다고 생각했고, 위 사진처럼 층(Layer)을

여러개 쌓아 만들어낸 모델의 결과가

뛰어나자 층을 깊게 쌓는다고 해서

딥러닝(Deep Learning)이라고 불리게 되었다고 한다!

 

 

 

 

 

                                    출처: https://donghwa96.tistory.com/11

또한 딥러닝이 나오게 된 배경에는

논리 게이트 XOR 문제를 해결하기 위해서도 있다.

AND와 OR은 위 사진처럼

하나의 직선으로 해결할 수 있고,

 

 

 

 

그 직선은 우리가 잘 알고있는

논리 회귀로 만들 수 있다.

위의 수식을 다음과 같은 그림으로

다시 표현할 수 있고 이를 Perceptron(퍼셉트론)이라고칭하였다.

 

 

 

 

출처: [가장 쉽게 배우는 머신러닝] 강의자료

이처럼 w0, w1, w2의 값만 잘 지정한다면

우리가 원하는 출력을 계산할 수 있었기 때문에 사람들은

"AND, OR 조합으로 생각하는 기계를 만들 수 있다!!"

라고 생각했고 실제로 1958년 뉴욕 타임즈에는

아래와 같은 루머가 실제로 실렸다고 한다.

 

 

 

 

출처: http://www.parvez-ahammad.org/blog/category/ai

1958년에 이런 생각을 했다는 것이

정말정말 놀라울 따름..!!

 

 

 

 

 

출처: https://extsdd.tistory.com/217

하지만! 이는 루머에 불과했던 것이

바로 XOR문제는 직선 하나로 풀 수 없다는 것..!

따라서 퍼셉트론을 여러개 붙인 MLP라는 개념을

도입해서 문제를 풀어보고자 하였으나

 

 

 

 

출처: 모두를 위한 딥러닝

너무 많은 연산량을 필요로 하기에

당시의 기술로는 불가능하다고

세계적으로 저명한 Minsky 박사가

논문을 통해 증명해내었고

MLP를 현실적으로 구현하기 위해서

20년 정도 후퇴하게 된다..!

 

 

 

 

위와 같은 이유로 지속되던

딥러닝의 침체기는 1974년에 발표된

Paul Werbos 박사의 Backpropagation Algorithm이 등장하며

와장창 깨지게 되었는데 폴 박사는

다음 세개의 주장을 펼쳤다.

 

 

 

 

출처: https://developer.nvidia.com/blog/inference-next-step-gpu-accelerated-deep-learning/

1. 우리는 W(weight)와 b(bias)를

이용해서 주어진 입력을 가지고 출력을 만들어 낼 수 있다.


2. 그런데 MLP가 만들어낸 출력이

정답값과 다를 경우 W와 b를 조절해야한다.


3.그것을 조절하는 가장 좋은 방법은 출력에서

Error(오차)를 발견하여 뒤에서 앞으로

점차 조절하는 방법이 필요하다.

 

 

 

 

무슨말인지 모르겠다구여?

괜찮아요. 저도 잘 ㅁ...은 아니고

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

음 한마디로 피드백을 이용한것인데 이전의 알고리즘들은

앞의 Layer부터 순차적으로 연산되는

Forward 방식이었다면, 이는 Output Layer부터

Chain Rule(연쇄법칙)을 이용하여 연산을 시작하여 

 가중치를 업데이트해가며 학습을 진행하는 알고리즘이다!

 

 

 

 

이정도는 완전 가볍게 설명한 내용이라

만약에 Backpropagation이 이해가 잘 안간다면

인터넷에 자세히 분석해 놓은 포스팅들이 있으니

찾아보는 것이 좋을듯하다!

(그냥 넘기기엔 무척 중요한 알고리즘이니까~!)

 

 

 

 


2. 딥러닝의 주요 개념

 

 

 

 

우선 딥러닝 학습에 주로 사용되는

단어들을 살펴보면

 

 

 

 

출처: https://www.mauriciopoppe.com/notes/computer-science/artificial-intelligence/machine-learning/glossary/

전제조건 : 1,000개의 데이터셋을 가짐

(아래 뜻 설명有)

 

 

 

 

1. Batch

: 수 많은 데이터셋을 한번에 학습시키기에는

컴퓨터가 버티기 힘드므로

작은 단위로 쪼개서 학습을 진행하는데

이때 쪼개는 단위(=100개)

 

 

 

 

2. Iteration

: 앞서 Batch size를 100개로 정하였다면

총 10번 반복하여야

모든 데이터셋을 학습시킬 수 있는데

이때 반복되는 횟수(=10번)

 

 

 

 

3. Epoch

: 보통 머신러닝에서 학습 시,

같은 데이터셋을 여러번 반복 학습시키는데

이때 반복학습이 진행되는 횟수(=정하기 나름)

 

 

 

 

출처: https://medium.com/@shrutijadon10104776/survey-on-activation-functions-for-deep-learning-9689331ba092

4. Activation Fuctions

: 뇌의 뉴런이 다음 뉴런으로 전달할 때 보내는

전기신호의 특성에서 영감을 받아 만들어진 함수로

특정 임계치(Threshhold)를 넘어야다음 뉴런을 활성화 시킴

활성화 함수 = 비선형 함수!

(참고) 요즘 대부분 ReLU를 기본으로 쓰지만

여러 함수를 교체하며 정확도를 높여나가는 작업 필수

 

 

 

 

출처: https://vitalflux.com/overfitting-underfitting-concepts-interview-questions/

5. Overfitting

: Layer를 증가시키며 모델을 학습하다보면

Training Error는 낮아지는데,

반면에 Test Error는 올라가는 현상

이는 풀고자하는 문제보다 모델의 복잡도가 높거나

데이터셋이 부족할 때 발생!

 

 

 

 

6. Underfitting

: Overfitting과 반대로 풀고자하는

문제에 비해서 모델의 복잡도가 낮을 때 발생

 

 

 

 


3. 딥러닝의 주요 스킬

 

 

 

 

앞서 배웠던 Overfitting을 해결할 수 있는

방법들에 대해서도 학습했다.

현재 졸작에서 객체검출 알고리즘인 Yolo를

커스텀마이징해서 사용하고자하는데

오버피팅으로 인해 넣는 사진 족족

버스라고 인식하는 문제가 발생하는데

우리에게 주어진 문제는

누가봐도 데!이!터!셋! 부족!!이기에

사진을 긁어모으던가.. 구현을 다른 방식으로 하는 것을

알아보는중..^^ 무튼 처해진 상황에 대한

솔루션이다보니 더욱 귀가 쫑긋 했다고함..ㅎㅎ

 

 

 

 

출처: https://www.mygreatlearning.com/blog/understanding-data-augmentation/

1. Data augmentation

: 데이터의 갯수 늘리기

진짜 데이터=엄청난 돈 인것을 다들 알 것(?)일 텐데

사람의 눈으로 위 사진들을 봤을 때

약간의 차이들은 존재하지만

누가봐도 전부 사자이기에 이처럼 가지고 있는

데이터를 약간 변형하여 데이터셋을 늘리는 꼼수방법!!

 

 

 

 

 

 

2. Dropout

: 사공이 많으면 배가 산으로 간다

라는 말이 있듯이

하나의 결과를 도출하기 위해 너무 많은

노드가 있으면 결과가 오히려 떨어짐!

따라서 적당히 노드들을 탈락시켜서

더 좋은 효과를 내도록 하는것!

 

 

 

 

3. Ensenble

: 좋은 애들 + 좋은 애들 => 좋은 애들이겠지?

이것은 컴퓨터가 고사양일 때 사용할 수 있는 방법으로

여러개의 딥러닝 모델을 각각 학습시킨 후

출력을 기반으로 투표를 진행하는 기법!

Random forest와 유사하나 약간의 차이는 존재하는

그런 방법임!

 

 

 

 


4. 실습

 

 

 

 

이번 3주차에 진행된 실습은

딥러닝이 도출된 배경인 XOR 실습과

Sign Language MNIST 데이터셋을 통해

직접 딥러닝 모델을 학습시키고,

과제로는 MNIST 데이터셋을 이용해

딥러닝 모델을 구현해보는 것이었다.

 

 

 


 

 

 

 

이전에 전공과목에서도 MNIST를 이용하여

글씨체 인식하는 모델을 구현해봤는데

그때도 신기했는데 지금 다시해봐도 신기했다.

이번 과제 역시 수업을 잘 따라왔고,

코드사이의 관계만 잘 알고 있다면

복붙+수정으로 해결할 수 있을 과제였다!

 

 

 

 

더욱 알고싶던 영역이기도 했고,

이전과 비슷한 시간의 강의였지만

새로운 내용들이 많았기에

포스팅도 무척 길어졌..ㅎㅎㅎ

무튼 3주차 강의도 끝!

 

 

 

 

내일은 드디어 마지막 강의이기도 하고

진도 사우르스에게 잡히지 않도록

4주차 강의를 수강하고

개발일지로 찾아오도록 하겠..다!

 

 

 

 

 

Good Bye~

 

 

Comments