케라스 창시자에게 배우는 딥러닝 (영화 리뷰 - 이진 분류 예제)


  • 신경망 모델링 : 은닉층과 은닉 유닛을 얼만큼 둘 것인가

※은닉층 : 입력 계층과 출력 계층 사이에 존재하는 층

  • 활성화 함수 : relu, tanh, sigmoid 등 / sigmoid는 확률으로서의 출력을 구하기 위해 사용한다.


활성화 함수를 쓰는 이유

생물학적 뉴런은 한 개의 신호(입력)가 아니라 여러 신호를 받는다. 그러나 뉴런은 신호를 받을 때마다 매번 반응(출력)할 수 없으니 여러 신호의 합들이 특정 분계점을 넘어야만 반응을 한다. 딥러닝의 신경망에서는 ‘활성화 함수’가 이러한 특성을 재현한다. 입력 값들의 합을 활성화 함수에 전달하면 이 입력을 활성화할지 말지 결정한다. 입력값의 합이 충분하지 않다면 활성화 함수는 다음 층에 0에 가깝거나 혹은 0 혹은 그 이하를 전달할 것이다(활성화 함수마다 다르다).

딥러닝에서 활성화 함수는 ‘비선형 함수’를 써야하는 이유

딥러닝에서 다층 신경망을 구성하는 이유를 생각해야 한다. a의 기울기를 가진 직선을 식으로 나타내면 y = ax이다.

두 데이터 셋이 양쪽으로 예쁘게 나눠져 있다면 직선을 가운데 두는 것만으로도 이 둘을 충분히 분류할 수 있을 것이다.

하지만 두 데이터 셋의 데이터 포인트들이 산발적으로 나뉘어져있거나 태극 문양처럼 휘어져서 나타나는 경우 직선으로는 분류하기 힘들다.

다층 신경망을 구성하면 선형 분류로는 풀기 어려웠던 문제들을 비선형적으로 풀 수 있다.

이때 활성화 함수가 위의 y = ax와 같은 선형 함수라고 가정하자.

다층 신경망을 구성해도 결국 a(a(ax)) = a3x (a는 상수)로 선형 함수와 같은 결과를 낳는다.

선형 함수의 한계를 극복하기 위해 다층 신경망을 구성했는데, 이렇게 되면 그 의미가 없다.

그러므로 비선형 함수의 활성화 함수를 다층 신경망 내에서 사용하여 선형 함수의 한계를 극복한다.


  • 손실 함수 : mse, binary-crossentropy / 이진 분류 문제에서는 binary-crossentropy를 사용한다.

  • 옵티마이저 : 일반적으로 옵티마이저는 rmsprop 이라는 걸 많이 쓴다.

  • 오버피팅 낮추는 법 : epochs를 너무 많이 주면, 훈련 데이터에 오버피팅 되어서 테스트 데이터의 예측률이 떨어진다.

※ 오버피팅 : 훈련 데이터의 학습에 편향되는 것


오버피팅 확인

훈련 데이터셋의 일부를 떼어내서 검증 데이터로 활용하고, 손실과 정확도 측면에서 훈련 데이터와 검증 데이터의 history를 비교하여 오버피팅 여부를 확인한다. 만약 epoch가 거듭될 수록 훈련 데이터의 손실은 하락, 정확도는 높아진 반면 검증 데이터의 손실은 상승, 정확도는 낮아졌다면 오버피팅된 것이다.
epochs 조절

오버피팅되었다면 epochs를 낮추면서 훈련 데이터의 학습에 편향되지 않도록 한다.

​​

Django Template


  • URL 매핑 규칙
  • Django 템플릿 태그


랜덤 팀 배정

  • 출석부 csv 파일 읽기
  • 팀장 그룹, 팀원 그룹 나누기
  • 팀원 그룹 셔플
  • 팀장 그룹에 팀원 할당 : 이 과정에서 학번, 전공 별로 조건을 붙여서 할당하고 싶은데… 어떻게 해야할까
  • ‘이름(학번, 전공)’ 포맷으로 바꾸기
  • 데이터 프레임으로 변환, 다시 csv 파일로 저장
  • tabultate로 팀 배정 결과를 pretty print 하기