[혼자 공부하는 머신러닝 + 딥러닝] 17강_인공 신경망: 간단한 인공 신경망 모델 만들기
17강_인공신경망: 간단한 인공 신경망 모델 만들기
- 딥러닝과 인공 신경망 알고리즘을 이해하고 텐서플로를 사용해 간단한 인공 신경망 모델을 만들어 봄.
- <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소
패션 MNIST
- MNIST
- 딥러닝을 처음 배울 때 많이 사용하는 데이터 셋.
- 0~9 까지의 숫자로 이루어져 있음
- MNIST 와 크기, 개수가 동일하지만 숫자 대신 패션 아이템으로 이루어진 데이터.
- 텐서플로우(케라스)를 사용해 데이터를 불러옴
로지스틱 회귀로 패션 아이템 분류하기
- 확률적 경사 하강법
- 샘플을 하나씩 꺼내서 모델을 훈련하는 방법.
- 넘파이 배열의 바이트 크기
- nbytes 속성에 저장되어 있음.
인공 신경망
- 출력층
- 신경망의 최종 값을 만든다는 의미
- 뉴런
- z 값을 계산하는 단위
- 유닛
- 뉴런이라는 표현 대신에 부름
- 입력층
- 픽셀값 자체, 특별한 계산을 수행하지 않음.
- 1943년 워런 매컬러와 월터 피츠가 제안한 뉴런 모델
- 매컬러-피츠 뉴런
- 생물학적 뉴런에서 영감을 얻음
- 기존의 머신러닝 알고리즘이 잘 해결하지 못했던 문제에서 높은 성능을 발휘하는 새로운 종류의 머신러닝 알고리즘일 뿐.
- 딥러닝
- 인공신경망과 거의 동의어로 사용됨
- 혹은 심층 신경망을 딥러닝이라고 함.
- 여러 개의 층을 가진 인공 신경망
텐서플로와 케라스
- 텐서플로
- 구글이 2015년 11월 오픈소스로 공개한 딥러닝 라이브러리
- 알파고가 이세돌 9단을 이겨 폭발적 인기 끔.
- 케라스
- 텐서플로의 고수준 API
- 2015년 3월 프랑소와 숄레가 만든 딥러닝 라이브러리
- 그래픽 처리 장치인 GPU 사용하여 인공 신경망 훈련 (벡터와 행렬 연산에 매우 최적화)
- 멀티-백엔드 케라스
인공 신경망으로 모델 만들기
- 인공 신경망에서 교차 검증을 사용하지 않고 검증 세트를 사용하는 이유
- 딥러닝 분야의 데이터셋은 충분히 크기 때문에 검증 점수가 안정적
- 교차 검증을 수행하기에는 훈련 시간이 너무 오래 걸리기 때문.
- 밀집층
- 완전 연결층
- 활성화 함수
- 소프트맥스와 같이 뉴런의 선형 방정식 계산 결과에 적용되는 함수
인공 신경망으로 패션 아이템 분류하기
- 케라스 모델은 훈련하기 전 설정 단계가 있고 model 객체의 compile() 메서드에서 수행 (손실 함수의 종류 지정, 계산하고 싶은 측정값 지정)
- 양성 클래스와 음성 클래스에 대한 크로스 엔트로피 계산
- 원-핫 인코딩
- 타깃값을 해당 클래스만 1이고 나머지는 모두 0인 배열로 만드는 것
- 다중 분류에서 크로스 엔트로피 손실 함수를 사용하려면 0,1,2 와 같이 정수로 된 타깃값을 원-핫 인코딩으로 변환해야함
- sparse_categorical_crossentropy
- 케라스는 에포크마다 걸린 시간과 손실(loss), 정확도(accuracy)를 출력해 줌.
- 검증 세트에서 모델의 성능 확인 (evaluate() 메서드)
인공 신경망 모델로 성능 향상
- MNIST 데이터셋 사용
- 로지스틱 손실함수를 사용한 SGDClassifier 모델로 교차 검증 점수를 확인
- 케라스를 사용해 간단한 인공 신경망 모델을 만들어 패션 아이템을 분류함.
- 경사 하강법 사용한 로지스틱 회귀 모델과 거의 비슷
- 신경망에서의 손실 함수 계산법과 원-핫 인코딩
- 사이킷런의 SGDClassifier와 케라스의 Sequential 클래스 사용법의 차이
키워드로 끝내는 핵심 포인트
- 인공 신경망
- 생물학ㅈ적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘
- 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음성, 텍스트 분야에서 뛰어난 성능을 발휘하면서 크게 주목받고 있으며 종종 딥러닝이라고도 부름
- 텐서 플로우
- 구글이 만든 딥러닝 라이브러리로 매우 인기가 높음.
- CPU와 GPU를 사용해 인공신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공함.
- 텐서플오우 2.0부터는 신경망 모델을 빠르게 구성할 수 있는케라스를 핵심 API로 채택함. 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있음
- 밀집층
- 가장 간단한 인공 신경망의 층
- 인공 신경망에는 여러 종류의 층이 있음.
- 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라도 부름.
- 특별히 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용.
- 원-핫 인코딩
- 정숫값을 배열에서 해당 정수 위치의 원소만 1이고 나머지는 모두 0으로 변환함. 이런 변환이 필요한 이유는 다중 분류에서 출력층에서 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서임.
- sparse_categorical_entropy 손실 지정
핵심 패키지와 함수
- Tensorflow
- Dense
- 신경망에서 가장 기본 층인 밀집층을 만드는 클래스
- Sequenrial
- 케라스에서 신경망 모델을 만드는 클래스
- compile()
- 모델 객체를 만든 후 훈련하기 전에 사용할 손실 함수와 측정 지표 등을 지정하는 메서드
- fit()
- 모델을 훈련하는 메서드
- evaluate()
- 모델 성능을 평가하는 메서드
확인 문제
- 어떤 인공 신경망의 입력 특성이 100 개 이고 밀집층에 있는 뉴런 개수가 10개 일 때 필요한 모델 파라미터의 개수는 몇개 인가?
- 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 함.
- 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야하나?
- 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 ?
- 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가?
댓글
댓글 쓰기