반응형

1. 인공 신경망

  • 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘
  • 신경망은 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음성, 텍스트 분야에서 뛰어난 성능을 발휘
  • 인공 신경망 알고리즘을 종종 딥러닝이라고도 부름
  • 텐서플로
    • 구글이 만든 딥러닝 라이브러리
    • CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필용한 다양한 도구를 제공
    • 텐서플로 2.0부터는 신경망 모델을 빠르게 구성할 수 있는 케라스를 핵심 API로 채택
    • 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있음
  • 밀집층
    • 가장 간단한 인공 신경망의 층
    • 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고도 부름
    • 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용
  • 원-핫 인코딩
    • 정숫값을 배열에서 해당 정수 위칭의 원소만 1이고 나머지는 모두 0으로 변환
    • 다중 분류에서 출력층에서 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서 변환이 필요
    • 텐서플로에서는 'sparse_categorical_entropy' 손실을 지정하면 이런 변환을 수행할 필요가 없음
  • 확인 문제
    1. 밀집층에 있는 뉴런 개수가 10개일 때 100개의 입력층과 연결된다. 1000개의 가중치가 발생 함. 뉴런마다 1개의 절편이 있으니 1010개의 모델 파라미터가 필요.
    2. sigmoid의 non-linear curver를 적용
    3. compile()
      1. loss 매개변수에 손실 함수를 지정
      2. 이진 부류일 경우 'binary_crossentropy', 다중 분류일 경우 'categorical_crossentropy'를 지정
      3. 정수일 경우 'sparse_categorical_crossentropy'로 지정
      4. 회귀 모델일 경우 'mean_square_error' 등으로 지정
      5. metrics 매개변수에 훈련 과정에서 측정하고 싶은 지표를 지정할 수 있음
      6. 측정 지표가 1개 이상일 경우 리스트로 전달
    4. 정수 레이블을 타겟으로 가지는 다중 분류 모델일 경우 compile() 메서드의 categorical_crossentropy를 지정

2. 심층 신경망

  • 2개 이상의 층을 포함한 신경망
  • 다층 인공 신경망, 심층 신경망, 딥러닝을 같은 의미로 사용
  • 렐루 함수
    • 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수
    • 시그모이드 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에 학습이 어려워짐
    • 렐루 함수는 이런 문제가 없으며 계산도 간단함
  • 옵티마이저
    • 신경망의 가중치와 절편을 학습하기 위한 알고리즘 또는 방법
    • 케라스에는 다양한 경사 하강법 알고리즘이 구현되어 있음
    • 대표적으로 SGD, 네스테로프 모멘텀, RMSprop, Adam 등이 있음.
  • 확인 문제
    1. add()
      1. 케라스 모델에 층을 추가하는 메서드
      2. keras.layers 패키지 아래에 있는 층의 객체를 입력받아 신경망 모델에 추가
      3. add() 메서드를 호출하여 전달한 순서대로 층이 차례대로 늘어남
    2. Flatten - 
    3. relu 함수는 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수
    4. SDG - 모멘텀, 네스테로프 모멘텀 알고리즘을 구현하는 클래스, 일정한 학습률을 사용함.

3. 신경망 모델 훈련

  • 드롭아웃
    • 은닉층에 있는 뉴런의 출력을 랜덤하게 꺼서 과대적합을 막는 기법
    • 훈련 중에 적용되며 평가나 예측에서는 적용하지 않음
    • 텐서플로는 이를 자동으로 처리
  • 콜백
    • 케라스 모델을 훈련하는 도중에 어떤 작업을 수행할 수 있도록 도와주는 도구
    • 대표적으로 최상의 모델을 자동으로 저장해 주거나 검증 점수가 더 이상 향상되지 않으면 일
      찍 종료할 수 있음
    • 조기종료
      • 검증 점수가 더 이상 감소하지 않고 상승하여 과대적합이 일어나면 훈련을 계속 진행하지 않고 멈추는 기법
      • 계산 비용과 시간을 절약할 수 있음
반응형
반응형
 
혼자 공부하는 머신러닝+딥러닝
이 책은 수식과 이론으로 중무장한 머신러닝, 딥러닝 책에 지친 ‘독학하는 입문자’가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. 구글 머신러닝 전문가(Google ML expert)로 활동하고 있는 저자는 여러 차례의 입문자들과 함께한 머신러닝&딥러닝 스터디와 번역ㆍ집필 경험을 통해 ‘무엇을’ ‘어떻게’ 학습해야 할지 모르는 입문자의 막연함을 이해하고, 과외 선생님이 알려주듯 친절하게 핵심적인 내용을 콕콕 집어준다. 컴퓨터 앞에서 〈손코딩〉을 따라하고, 확인 문제를 풀다 보면 그간 어렵기만 했던 머신러닝과 딥러닝을 개념을 스스로 익힐 수 있을 것이다! - 베타리더가 함께 만든 입문서 베타리딩 과정을 통해 입문자에게 적절한 난이도, 분량, 학습 요소 등을 고민하고 반영했다. 어려운 용어와 개념은 한 번 더 풀어 쓰고, 복잡한 설명은 눈에 잘 들어오는 그림으로 풀어 냈다. ‘혼자 공부해본’ 여러 입문자의 마음과 눈높이가 책 곳곳에 반영된 것이 이 책의 가장 큰 장점이다.
저자
박해선
출판
한빛미디어
출판일
2020.12.21

[기본]

인공지능, 머신러닝, 딥러닝 간단 정리

인공지능 : 사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술. 강인공지능과 약인공지능으로 나뉜다.

머신러닝 : 규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘 연구분야. 사이킷런이 대표적인 라이브러리

딥러닝 : 인공 신경망. 텐서플로와 파이토치가 대표적인 라이브러리

 

 


구글 코랩

로컬 환경에 별도의 개발 환경을 구축하지 않아도 구글에서 지원해주는 웹브라우저 기반 파이선 프로그램의 테스트 및 저장할 수 있는 서비스.

 

요약 : 클라우드 기반의 주피터 노트북 개발 환경

 

구글 계정만 있다면 누구나 무료로 사용할 수 있다. 

 

로그인 및 코랩 접속은 (https://colab.research.google.com) 에서 할 수 있다.

구글 계정으로 로그인 하지 않아도 코랩에 접속할 순 있지만 코드 실행 및 저장을 위해서는 로그인하는 것을 권장.

 


1차 코랩 실습 

- k-최근접이웃 알고리즘을 사용하여 2개의 종류를 분류하는 머신러닝 모델 훈련

- #특성 #훈련 #k-최근접이웃알고리즘 #모델 #정확도

 

- 특성 : 데이터의 특징. 예) 도미의 특징을 길이와 무게로 표현한 것

아래 사용하는 생선 데이터셋은 캐글에 공개된 데이터셋을 사용.(https://www.kaggle.com/aungpyaeap/fish-market)

* 도미 데이터셋

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]

 

- 산점도 : x, y축으로 이뤄진 좌표계에 두 변수(x, y)의 관계를 표현하는 방법

- 맷플롯립(matplotlib)의 scatter() 함수를 사용하여 산점도 그래프를 사용

- 도미 데이터셋의 길이를 x축, 무게를 y축으로 산점도를 표시

import matplotlib.pyplot as plt

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]

plt.scatter(bream_length, bream_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

 

- 코랩 실행 결과

도미데이터를 기준으로 산점도를 표시한 결과

 

* 빙어 데이터셋

smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

 - 기존 scatter() 함수에 빙어 데이터셋 추가

import matplotlib.pyplot as plt

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]

smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

 

- 코랩 실행 결과

빙어 데이터를 추가하여 산점도를 표시

 


k-최근접 이웃 알고리즘 적용

- k-최근접 이웃 알고리즘을 적용하여 도미와 빙어 데이터를 구분

- 사이킷런을 사용하여 머신러닝을 진행

- 사이킷런을 사용하기 위해서는 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트가 필요

- 파이썬의 zip() 함수와 리스트 내포(list comprehension) 구문을 사용하여 2차원 리스트를 생성

 

* 도미와 빙어의 데이터를 하나의 데이터로 만들기

length = bream_length + smelt_length
weight = bream_weight + smelt_weight

fish_data = [[l,w] for l, w in zip(length, weight)]
print(fish_data)

- 코랩 실행 결과

도미와 빙어의 데이터를 합쳐서 2차원 리스트로 만든 결과

 

- 머신 러닝을 하기 전에 준비할 정답 데이터셋.

- 머신 러닝 알고리즘이 생선의 길이와 무게를 보고 도미와 빙어를 구분하는 규칙을 찾기 원하기 때문

- 기존 데이터에서 어떤 것이 도미이고 어떤 것이 빙어인지 알려주어야 함

 

* 정답 데이터셋 만들기

fish_target = [1] * 35 + [0] * 14
print(fish_target)

 

- 코랩 실행 결과

정답 데이터셋

 

- 사이킷런의 k-최근접 이웃 알고리즘을 구현한 KNeighborsClassifier 클래스를 사용

- 훈련 : 기준 데이터를 사이킷런에 전달하여 학습시키는 과정

- 사이킷런에서는 fit() 메서드를 사용한다.

- fit() 메서드로 주어진 데이터로 알고리즘 훈련 후 얼마나 잘 훈련되었는지 score() 메서드를 사용하여 모델을 평가

- score() 메서드는 0~1 사이의 값을 반환. 1은 모든 데이터를 정확히 맞혔다는 것

 

* 데이터 알고리즘 학습

from sklearn.neighbors import KNeighborsClassifier

kn = KNeighborsClassifier()
kn.fit(fish_data, fish_target)
kn.score(fish_data, fish_target)

- 코랩 실행 결과

알고리즘 학습 결과


[선택] 간단히 사이킷런을 사용하여 알고리즘 학습을 진행해 보았고, 책에 나온 문제 내용을 정리

 

1. 머신 러닝 알고리즘의 한종류. 샘플 입력과 타깃을 알고 있을 때 사용할 수 있는 학습 방법 - 지도학습 

- 지도학습 : 훈련하기 위한 데이터와 정답이 필요. 정답(타깃)이 있으니 알고리즘 정답을 맞히는 것을 학습

- 비지도학습 : 타깃 없이 입력 ㅔ이터만 사용. 정답을 사요하지 않으므로 무언가를 맞힐 순 없으나 데이터를 잘 파악하거나 변형하는 데 도움을 줌

- 차원축소 : 비지도 학습의 큰 축. 고차원의 원본 데이터를 저 차원의 부분공간으로 투영하여 데이터를 축소하는 기법. 예) 10차원 이상의 데이터가 주어졌을 때 2~3차원의 데이터로 부분공간으로 투영하여 데이터를 축소. 차원이 증가할수록 데이터 포인트 간 거리가 기하급수적으로 멀어져 희소한 구조를 가지게 됨. 피처가 많아지게 되면 개별 피처 간 상관관계가 높아 다중공선성의 문제 과적합이나 예측 성능이 저하될 우려가 있음.

- 강화학습 : 현재의 상태(state)에서 어떤 행동(action)을 취하는 것이 최적인지를 학습하는 것. 행동을 취할 때마다 외부 환경에서 보상(reward)이 주어지고, 보상을 최대화하는 방향으로 학습이 진행

 

2. 훈련 세트와 테스트 세트가 잘못 만들어져 전체 데이터를 대표하지 못하는 현상 - 샘플링 편향

- 샘플링 오류 : sampling error는 랜덤 표본의 통계와 실제 모집단 값 사이의 불일치를 의미. 자연적인 우연인자를 말하는 것이지, 설계가 부실하고 실행이 잘 안되어 있는 실험에 의한 측정 오류는 아니다.

- 샘플링 실수 : 아직 답을 찾는 중입니다. 향후 업데이트

- 샘플링 편차 : 아직 답을 찾는 중입니다. 향후 업데이트

- 샘플링 편향 : 일반적으로 훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않으면 샘플링 한쪽으로 치우쳤다는 의미

 

3. 사이킷런은 입력 데이터(배열)가 어떻게 구성되어 있을 것으로 기대하는가

- 테이블의 행은 수많은 샘플들로 구성되고, 열은 샘플의 특성들로 구성.

- 샘플이 특성에 비해 너무 적으면 overfit이 발생하거나 예측이 안될 수 있음.

 

반응형

'IT > 머신러닝&딥러닝' 카테고리의 다른 글

05. 비지도 학습  (0) 2023.02.12
04. 교차 검증 및 앙상블 학습  (0) 2023.02.05
03. 로지스틱 회귀  (0) 2023.01.24
02. 회귀 알고리즘과 모델 규제  (0) 2023.01.15
00. 혼자 공부하는 머신러닝 & 딥러닝  (0) 2023.01.08

+ Recent posts