Deep learning

be1le·2022년 1월 11일
9

ML

목록 보기
3/22


오늘은 Deep learning에 대해 글을 써볼 생각이다..!
딥러닝의 역사와
신경망을 이해하고 만드는 데 필요한 각종 개념을 알아본 후
신경망을 직접 디자인 해보자!

History of Deep learning

기존의 머신러닝은 AND,OR문제로부터 파생되었다.

이런 문제는 직선 하나만 있으면 되서, 논리회귀로 쉽게 만들 수 있었다.

이 수식을 아래와 같이 그림으로 나타낼 수 있다. 이런 모양을 Perceptron 이라고 불렀었다.
w0, w1, w2 의 값만 잘 지정해주면 우리가 원하는 출력을 계산할 수 있었기 때문에 사람들은 흥분하였고. AND, OR 문제를 잘 조합하면 생각하는 기계를 만들 수 있겠다!

하지만 선형회귀로는 AND, OR 문제는 잘 풀었지만 XOR 문제는 풀지 못하게 되는데.
여기서 1974년 세상에 모습을 비춘 Backpropagation이 이문제를 해결하게 됩니다!

1. 우리는 W(weight)와 b(bias)를 이용해서 주어진 입력을 가지고 출력을 만들어 낼 수 있다.
2. 그런데 MLP가 만들어낸 출력이 정답값과 다를 경우 W와 b를 조절해야한다.
3. 그것을 조절하는 가장 좋은 방법은 출력에서 Error(오차)를 발견하여 뒤에서 앞으로 점차 조절하는 방법이 필요하다.
이렇게 XOR 문제는 MLP로 풀 수 있게 되어 해결 되었고, 그중심에는 역전파 알고리즘의 발견이 있었던 것입니다!
알고리즘 하나가 세상을 바꾸니까.

Deep Neural Networks 구성 방법


딥러닝에서 네트워크의 구조는 크게 3가지로 나누어진다!

  • Input layer(입력층): 네트워크의 입력 부분. 우리가 학습시키고 싶은 x 값입니다.
  • Output layer(출력층): 네트워크의 출력 부분. 우리가 예측한 값, 즉 y 값입니다.
  • Hidden layers(은닉층): 입력층과 출력층을 제외한 중간층.
    풀어야하는 문제에 따라 입력층과 출력층의 모양은 정해져 있고,그모양이 일치하지 않으면 당연히 에러를 낸다. 따라서 우리가 신경써야할 부분은 은닉층입니다. 은닉층은 완전연결 계층 (Fully connected layer = Dense layer)으로 이루어져 있지요. 편하게 Dense라고 부르겠습니다.
    기본적인 뉴럴 네트워크(Deep neural networks)에서는 보통 은닉층에 중간 부분을 넓게 만드는 경우가 많습니다. 예를 들면 보편적으로 아래와 같이 노드의 개수가 점점 늘어나다가 줄어드는 방식으로 구성합니다:)

    활성화 함수가 없다면 다같은 값만 나올거기 때문에 은닉층이 의미가 없어질 겁니다...!

딥러닝의 주요 개념

batch와 iteration

  • 만약 우리가 10,000,000개의 데이터셋을 가지고 있다고 가정합시다. 10,000,000개의 데이터셋을 한꺼번에 메모리에 올리고 학습시키려면 엄청난 용량을 가진 메모리가 필요하고 그 메모리를 사는데 (메모리가 없다면 개발하는데) 천문학적인 비용이 들 것입니다.
  • 따라서 우리는 이 데이터셋을 작은 단위로 쪼개서 학습을 시키는데 쪼개는 단위를 배치(Batch)라고 부릅니다. 예를 들어서 1,000만개의 데이터셋을 1,000개 씩으로 쪼개어 10,000번을 반복하는 것이죠. 이 반복하는 과정을 Iteration(이터레이션)이라고 부릅니다.
  • epoch
    - 보통 머신러닝에서는 똑같은 데이터셋을 가지고 반복 학습을 하게되는데요, 이 과정은 우리가 수능시험을 대비해서 모의고사 문제를 여러번 풀어보는 과정하고 비슷합니다. 만약 100번 반복 학습을 한다면 100 epochs(에폭)을 반복한다고 말해요.
    - batch를 몇 개로 나눠놓았냐에 상관 없이 전체 데이터셋을 한 번 돌 때 한 epoch이 끝납니다.
    따라서 1천만개의 데이터셋을 1천개 단위의 배치로 쪼개면, 1만개의 배치가 되고, 이 1만개의 배치를 100에폭을 돈다고 하면 1만 * 100 = 100만번의 이터레이션을 도는 것이 됩니다!

    Activation functions (활성화 함수)

활성화 함수는 뇌의 뉴런이 다음 뉴런으로 전달할 때 보내는 전기신호의 특성에서 영감을 받아 만들어졌다.

수많은 뉴런들은 서로 서로 빠짐없이 연결되어 있습니다. 그런데 뉴런들은 전기 신호의 크기가 특정 임계치(Threshold)를 넘어야만 다음 뉴런으로 신호를 전달하도록 설계되어 있습니다. 연구자들은 뉴런의 신호전달 체계를 흉내내는 함수를 수학적으로 만들었는데, 전기 신호의 임계치를 넘어야 다음 뉴런이 활성화 한다고해서 활성화 함수라고 부릅니다.

딥러닝 주요스킬

Data augmentation (데이터 증강기법)
과적합을 해결할 가장 좋은 방법은 데이터의 개수를 늘리는 방법입니다. 하지만 실무에서는 데이터가 넘쳐나기는 커녕 부족한 경우가 매우 많습니다. 부족한 데이터를 보충하기위해 우리는 데이터 증강기법이란느 꼼수아닌 꼼수를 사용합니다. 데이터 증강기법은 이미지 처리 분야의 딥러닝에서 주로 사용하는 기법입니다.

Dropout (드랍아웃)
랜덤한 노드와의 연결을 끊어버림으로써 사공이많은걸 방지한다!!

lr decay
사실 글로벌 미니멈에 도달하는 것이 상당히 어려운 일이기 때문에 로컬 미니멈에라도 가장빨리 도달하는 생각에서 고안된 방법
keras에서는
tf.keras.callbacks.LearningRatescheduler() 이런식을 호출해서 사용할 수 있다!

실습

kaggle API로 실습할 데이터 셋을 로드하고 압축해제를 하였다.

해당주석을 잘살펴보면 Dense 뿐만이 아니라 Input도 우리가 직접 지정해 주어야 하기에 임포트 해온걸 알 수있다!

이건 test!

이렇게 입력과 출력을 나눠주고

이렇게 음흉하게 먼저 볼수도 있다.

원핫인코딩으로 keras에서 다루기 쉽게 만들어 주고 나면

일반화

네트워크 구성

대망의 학습!

20번의 에폭후 정확도가 0.845까지 올라왔다!

학습결과 그래프를 그려보면

정확도도 이쁘게 그려보면

이로써 성공적으로 학습한걸 그래프로도 그려볼수 있었다! 계속쓰는 메쏘드만 임포트 해오다 보니 어느정도 친숙해짐을 느껴지는게 뿌듯한 하루가 되었던것 같다!

profile
그저 그런 개발자가 되지 않겠습니다.

0개의 댓글