혼자 공부하는 머신러닝 + 딥러닝
홍공머신 : 혼자공부하는 일에 능숙한 사람 혹은 그런 무리를 일컫는 신조어
이 책은 이론과 방식 설명에 예를 들어 설명해줘 접근이 쉽도록 도와주는 책으로 비전공자도 입문서로 활용하기에 좋은 책입니다. 책 안에 학습로드맵이 있어서 어떤 부분을 건너뛰고 어떤 부분을 집중적으로 봐야 하는지가 설명이 되어 있어서 인상적이었습니다.
혼자 공부하는 7단계 길잡이
- 핵샘키워드 : 해당 절에서 집중적으로 볼 내용을 확인
- 시작하기 전에 : 해당 절에서 배울 주제 및 주요 개념 설명
- 말풍선 : 지나치기 쉬운 내용 혹은 기억해야 할 내용
- 손코딩 : 코드를 직접 손으로 입력하고 실행
- 문제해결 과정 : 이 내용을 통해 실제 프로젝트에서 문제를 해결할때 어떤 사고 과정을 거치는지 확인
- 핵심 포인트/패키지와 함수 : 핵심포인트, 핵심 패키지와 함수를 통해 핵심 키워드를 리마인드하고, 중요한 함수의 기능 학습
- 확인문제 : 문제를 풀면서 지금까지 학습한 내용 확인
Chapter 1. 나의 첫 머신러닝
인공지능(AI)이란? 사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술
머신러닝(Machine Learning)은 규칙을 일일이 프로그램하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야, 사이킷런이 대표적 라이브러리
딥러닝(Deep Learning)은 머신러닝 알고리즘 중에 인공신경망(Artificial Neural Network)을 기반으로 한 방법을 통칭, 텐서플로우, 파이토치가 대표적 라이브러리
구글 코랩(Colab)은 웹 브라우저에서 무료로 파이썬 프로그램을 테스트하고 저장할 수 있는 서비스로 클라우드 기반 주피터 노트북 개발환경입니다. 무료라 최대 5개 가상서버를 활용할 수 있습니다.
머신러닝에서 여러 개의 종류(or 클래스) 중 하나를 구별해 내는 문제를 분류(Classification)라고 하며 2개 클래스 중 하나를 고르는 문제를 이진 분류라고 합니다.
머신러닝 용어
-
특성 : 데이터를 표현하는 하나의 성질 (ex : 길이, 무게)
- 훈련 : 데이터에서 규칙을 찾는 과정
- 모델 : 알고리즘이 구현된 객체(or 알고리즘 자체)
- 정확도 : 정확한 답을 몇개 맞혔는지를 백분율로 나타낸 값 (ex, 사이킷런에서는 0~1 사이)
scikit-learn
- KNeighborsClassifier() 는 k-최근접 이웃 분류 모델을 만드는 사이킷런 클래스로 기본값은 5
- fit() : 사이킷런 모델을 훈련할 때 사용하는 메소드
- predict() : 사이킷런 모델을 훈련하고 예측할 때 사용하는 메소드
- score() : 훈련된 사이킷런 모델의 성능을 측정
Chapter 2. 데이터 다루기
머신러닝 알고리즘은 지도 학습과 비지도 학습으로 나눌 수 있습니다. 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답이 필요하며, 비지도 학습은 타킷 없이 입력 데이터만 사용합니다.
머신러닝의 정확한 평가를 위해서는 테스트 세트와 훈련 세트가 따로 준비되어야 하며, 평가에 사용하는 데이터를 테스트 세트, 훈련에 사용하는 데이터를 훈련 세트라고 부릅니다.
훈련하는 데이터와 테스트 하는 데이터에는 데이터가 골고루 섞여 있어야 합니다. 일반적으로 골고루 섞여 있지 않으면 한쪽으로 치우치는 샘플링 편향(sampling bias)가 발생합니다.
훈련세트는 모델을 훈련할 때 사용하는 데이터로 보통 훈련 세트가 클수록 좋기 때문에 테스트 세트를 제외한 모든 데이터를 사용합니다.
테스트세트는 전체 데이터에서 20~30%를 테스트 세트로 사용하는 경우가 많으며 전체 데이터 아주 큰 경우에는 1%만 덜어내도 충분할 수 있습니다.
데이터 전처리는 머신러닝 모델에 훈련 데이터를 주입하기 전에 가공하는 단계를 말하며 때로는 데이터 전처리에 많은 시간이 소요된다.
표준점수는 훈련 세트의 스케일을 바꾸는 대표적인 방법 중 하나로 표준점수를 얻으려면 특성의 평균을 빼고 표준편차로 나눕니다. 반드시 훈련 세트의 평균과 표준편차로 테스트 세트를 바꿔야 합니다.
브로드캐스팅은 크기가 다른 넘파이 배열에서 자동으로 사칙 연산을 모든 행이나 열로 확장하여 수행하는 기능입니다.
Chapter 3. 회귀 알고리즘과 모델 규제
지도 학습 알고리즘은 크게 분류와 회귀로 나뉘어지고, 분류는 샘플을 몇 개의 클래스 중 하나로 분류하는 문제입니다. 회귀는 클래스 중 하나로 분류하는 것이 아니라 임의의 어떤 숫자를 예측하는 문제입니다.
두 변수 사이의 상관관계를 분석하는 방법 : 회귀(regression)
k-최근접 이웃 회귀 : k-최근접 이웃 알고리즘을 사용해 회귀 문제를 풀며, 가장 가까운 이웃 샘플을 찾고 이 샘플들의 타킷값을 평균하여 예측으로 삼습니다.
결정계수 : 대표적인 회귀 문제의 성능 측정도로 1에 가까울수록 좋고, 0에 가까울수록 성능이 나쁜 모델입니다.
과대적합 vs 과소적합
과대적합 : 모델의 훈련 세트 성능이 테스트 세트 성능보다 훨씬 높을 때 일어납니다. 모델이 훈련 세트에 너무 집착하여 데이터에 내재된 거시적인 패턴을 감지하지 못합니다.
과소적합 : 훈련 세트와 테스트 세트 성능이 모두 동일하게 낮거나 테스트 세트 성능이 오히려 더 높을 때 일어납니다. 이런 경우 더 복잡한 모델을 사용해 훈련 세트에 잘 맞는 모델을 만들어야 합니다.
선형회귀
널리 사용되는 대표적인 회귀 알고리즘으로 비교적 간단하고 성능이 뛰어납니다. 특성이 하나인 경우 어떤 직선을 학습하는 알고리즘입니다. (ex, LinearRegression)
모델 파라미터는 선형 회귀가 찾은 가중치처럼 머신러닝 모델이 특성에서 학습한 파라미터를 의미합니다.
다중회귀
여러 개의 특성을 사용하는 회귀모델입니다. 특성이 많으면 선형 모델은 강력한 성능을 발휘합니다.
특성공학 : 주어진 특성을 조합하여 새로운 특성을 만드는 일련의 작업 과정
릿지 : 규제가 있는 선형 회귀 모델 중 하나이며 선형 모델의 계수를 작게 만들어 과대적합을 완화
라쏘 : 또 다른 규제가 있는 선형 회귀 모델입니다. 릿지와 달리 계수 값을 아예 0으로 만들수 있습니다.
하이퍼파라미터 : 머신러닝 알고리즘이 학습하지 않는 파라미터, 이 파라미터는 사람이 사전에 지정해야 합니다.
Chapter 4. 다양한 분류 알고리즘
로지스틱 회귀
로직스틱 회귀는 이름은 회귀이지만 분류 모델입니다. 선형 회귀와 달리 시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력할 수 있습니다.
다중분류는 타킷 클래스가 2개 이상인 분류 문제입니다. 로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측합니다.
시그모이드 함수는 선형 방정식의 출력을 0과 1시아의 값으로 압축하며 이진 분류를 위해 사용합니다.
소프트맥스는 다중 분류에서 여러 선형 방적식의 출력 결과를 정규화하여 합이 1이 되도록 만듭니다.
확률적 경사 하강법
확률적 경사 하강법은 훈련 세트에서 샘플 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘입니다. 샘플을 하나씩 사용하지 않고 여러 개를 사용하면 미니배치 경사 하강법이 됩니다. 한번에 전체 샘플을 사용하면 배치 경사 하강법이 됩니다.
손실함수는 확률적 경사 하강법이 최적화할 대상입니다. 대부분의 문제에 잘 맞는 손실 함수가 이미 정의되어 있습니다. 이진 분류에는 로지스틱 회귀 손실 함수를 사용합니다. 다중 분류에는 크로스엔트로피 손실 함수를 사용합니다. 회귀 문제에는 평균 제곱 오차 손실 함수를 사용합니다.
에포크(epoch)는 확률적 경사 하강법에서 전체 샘플을 모두 사용하는 한번 반복을 의미합니다. 일반적으로 경사 하강법 알고리즘은 수십에서 수백 번의 에포크를 반복합니다.
Chapter 5. 트리 알고리즘
결정트리는 예/아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘으로 비교적 예측 과정을 이해하기 쉽고 성능도 뛰어납니다.
불순도는 결정트리가 최적의 질문을 찾기 위한 기준으로 사이킷런은 지니 불순도와 엔트로피 불순도를 제공합니다.
정보이득은 부모 노드와 자식 노드의 불순도 차이입니다. 결정 트리 알고리즘은 정보 이득이 최대화되도록 학습합니다.
결정트리는 제한 없이 성장하면 훈련 세트에 과대적합되기 쉽습니다. 가지치기는 결정트리의 성장을 제한하는 방법으로 사이킷런의 결정트리 알고리즘은 여러가지 가지치기 매개변수를 제공합니다.
특성중요도는 결정트리에 사용된 특성이 불소도를 감소하는데 기여한 정도를 나타내는 값으로 특성 중요도를 계산할 수 있는 것이 결정트리의 큰 장점입니다.
검증 세트는 하이퍼파라미터 튜닝을 위해 모델을 평가 할 때, 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어 낸 데이터 세트입니다.
교차 검증은 훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련합니다. 교차 검증은 이런 식으로 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법입니다.
그리드 서치는 하이퍼파라미터 탐색을 자동화해주는 도구입니다. 탐색할 매개변수를 나열하면 교차 검증을 수행하여 가장 좋은 검증 점수의 매개변수 조합을 선택합니다. 마지막으로 이 매개변수 조합으로 최종 모델을 훈련합니다.
랜덤 서치는 연속된 매개변수 값을 탐색할 때 유용합니다. 탐색할 값을 직접 나열하는 것이 아니고 탐색 값을 샘플링할 수 있는 확률 분포 객체를 전달합니다. 지정된 횟수만큼 샘플링하여 교차 검증을 수행하기 때문에 시스템 자원이 허락하는 만큼 탐색량을 조절할 수 있습니다.
앙상블 학습은 정형 데이터에서 가장 뛰어난 성능을 내는 머신러닝 알고리즘 중 하나입니다.
랜덤포레스트 : 대표 앙상블 학습 알고리즘으로 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만드는 것이 특징입니다.
엑스트라 트리 : 결정 트리의 노드를 랜덤하게 노드를 분할해 과대적합을 감소시킵니다.
그레디언트 부스팅 : 이전 트리의 손실을 보완하는 식으로 얕은 결정 트리를 연속하여 추가하여 손실함수를 최소화하는 앙상블 방법입니다. 훈련 속도가 조금 느리지만 더 좋은 성능을 기대할 수 있습니다.
히스토그램 기반 그레디언트 부스팅 : 훈련 데이터를 256개 정수 구간으로 나누어 빠르고 높은 성능을 매우 인기가 높습니다.
Chapter 6. 비지도 학습
비지도 학습은 머신러닝의 한 종류로 훈련 데이터에 타킷이 없습니다. 타킷이 없기 때문에 외부의 도움없이 스스로 유용한 무언가를 학습해야 합니다. 대표적인 비지도 학습 방법은 군집, 차원 축소 등입니다.
히스토그램은 구간별로 값이 발생한 빈도를 그래프로 표시한 것입니다. 보통 x축이 값의 구간(계급)이고 y축은 발생 빈도(도수)입니다.
군집은 비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습 작업으로 군집 알고리즘으로 모은 샘플 그룹을 클러스터라고 부릅니다.
k-평균 알고리즘은 처음에 랜덤하게 클러스터 중심을 정하고 클러스터를 만듭니다. 그 다음 클러스터의 중심을 이동하고 다시 클러스터를 만드는 식으로 반복해서 최적의 클러스터를 구성하는 알고리즘입니다.
차원 추고는 원본 데이터의 특성을 적은 수의 새로운 특성으로 변환하는 비지도 학습의 한 종류입니다. 차원 축소는 저장공간을 줄이고 시각화하기 쉽습니다. 또한 다른 알고리즘의 성능을 높일 수 도 있습니다.
주성분 분석(PCA)는 차원 축소 알고리즘의 하나로 데이터에서 가장 분산이 큰 방향을 찾는 방법입니다. 이런 방향을 주성분이라고 부릅니다. 원본 데이터를 주성분에 투영하여 새로운 특성을 만들 수 있습니다. 일반적으로 주성분은 원본 데이터에 있는 특성 개수보다 작습니다.
Chapter 7. 딥러닝을 시작합니다
인공신경망은 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘이다. 이름이 신경망이지만 실제 우리 뇌를 모델링한 것은 아닙니다. 인공신경만은 다름 이름으로 딥러닝이라고 부릅니다.
텐서플로는 구글이 만든 딥러닝 라이브러리로 매우 인기가 높으며 CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공합니다. 텐서플로2.0부터 신경망 기 모델을
빠르게 구성할 수 있는 케라스를 핵심 API로 채택하여 간단한 모델에서 복잡한 모델까지 손쉽게 만들수 있습니다.
밀집층은 가장 간단한 인공신경망의 층입니다. 인공신경망에는 여러 종류의 층이 있습니다. 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고 부릅니다. 특별히 출력층에 밀집층을 사용할 때는
분류하려는 클래스와 동일한 개수의 뉴런을 사용합니다.
원-핫 인코딩은 정수값을 배열에서 해당 정수 위치의 원소만 1이고 나머진 모두 0으로 변환합니다,. 이런 변환이 필요한 이유는 다중 분류에서 출력층에서 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서 입니다.
심층 신경망은 2개 이상의 층을 포함한 신경망입니다. 종종 다층 인공신경망, 심층신경망, 딥러닝을 같은 의미로 사용합니다.
렐루 함수는 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수입니다. 시그모이드 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에 학습이 어려워집니다. 렐루 함수는 이런 문제가 없으며 계산도 간단합니다.
옵티마이저는 신경망의 가중치와 절편을 학습하기 위한 알고리즘으로 케라스에는 다양한 경사 하강법 알고리즘이 구현되어 있습니다. 대표적으로 SGD, 네스테로포 모멘텀, RMSprop, Adam 등이 있습니다.
드롭아웃은 은닉층에 있는 뉴런의 출력을 랜덤하게 꺼서 과대적합을 막는 기법입니다. 드롭아웃은 훈련 중에 적용되며 평가나 예측에서는 적용하지 않습니다. 텐서플로는 이를 자동으로 처리합니다.
콜백은 케라스 모델을 훈련하는 도중에 어떤 작업을 수행할 수 있도록 도와주는 도구입니다. 대표적으로 최상의 모델을 자동으로 저장해 주거나 검증 점수가 더 이상 향상되지 않으면 일찍 종료할수 있습니다.
조기종료는 검증 점수가 더 이상 감소하지 않고 상승하여 과대적합이 일어나면 훈련을 계속 진행하지 않고 멈추는 기법입니다.
Chapter8. 이미지를 위한 인공 신경망
합성곱은 밀집층과 비슷하게 입력과 가중치를 곱하고 절편을 더하는 선형 계산입니다. 하지만 밀집층과 달리 각 합성곱은 입력 전체가 아니라 일부만 사용하여 선형 계산을 수행합니다.
합성곱 층의 필터는 밀집층의 뉴런에 해당하며 필터의 가중치와 절편을 종종 커널이라고 부릅니다. 자주 사용되는 커널의 크기는 (3,3) 또는 (5,5)입니다. 커널의 깊이는 입력의 깊이와 같습니다.
특성 맵은 합성공 층이나 풀링 층의 출력 배열을 의미합니다. 필터 하나가 하나의 특성 맵을 만듭니다. 합성곱 층에서 5개의 특성 맵이 만들어 집니다.
패딩은 합성곱 층의 입력 주위에 추가한 0으로 채워진 픽셀입니다. 패딩을 사용하지 않는 것을 밸리드 패딩이라고 합니다. 합성곱 층의 출력 크기를 입력과 동일하게 만들기 위해 입력에 패딩을 추가하는 것을 세임 패딩입니다.
스트라이드는 합성곱 층에서 필터가 입력 위를 이동하는 크기입니다. 일반적으로 스크라이드는 1픽셀을 사용합니다.
풀링은 가중치가 없고 특성 맵의 가로세로 크기를 줄이는 역할을 수행합니다. 대표적으로 최대 풀링과 평균 풀링이 있으며 (2,2) 풀링으로 입력을 절반으로 줄입니다.
가중치 시각화는 합성곱 층의 가중치를 이미지로 출력하는 것을 말합니다. 합성곱 신경망는 주로 이미지를 다루기 때문에 가중치가 시각적인 패턴을 학습하는 지 알아볼 수 있습니다.
특성맵 시각화는 합성곱 층의 활성화 출력을 이미지로 그리는 것을 말합니다. 가중치 시각화와 함께 비교하여 각 필터가 이미지 어느 부분을 활성화시키는 지 확인할 수 있습니다.
Chapter 9. 텍스르르 위한 인공 신경망
순차 데이터는 텍스트나 시계열 데이터와 같이 순서에 의미가 있는 데이터입니다. 대표적인 순차 데이터로는 글, 대화, 일자별 날씨 등 예로 들수 있습니다.
순환 신경망은 순차 데이터에 잘 맞는 인공 신경망의 한 종류입니다. 순차 데이터를 처리하기 위해 고안된 순환층을 1개이상 사용한 신경망을 순환 신경망이라고 합니다.
망뭉치는 자연어 처리에서 사용하는 텍스트 데이터의 모음, 즉 훈련데이터셋을 뜻합니다.
토큰은 텍스트에서 공백으로 구분되는 문자열을 말하며, 종종 소문자로 변환하고 구둣점은 삭제합니다.
원-핫 인코딩은 어떤 클래스에 해당하는 원소만 1이고, 나머진 0인 벡터입니다. 정수로 변환된 토큰을 원-핫 인코딩으로 변환하려면 어휘 사전 크기의 벡터가 만들어집니다.
단어 임베딩은 정수로 변환된 토큰을 비교적 작은 크기의 실수 밀집 벡터로 변환합니다. 이런 밀집 벡터는 단어 사이의 관계를 표현할 수 있기 때문에 자연어 처리에서 좋은 성능을 발휘합니다.
LSTM 셀은 타입스텝이 긴 데이터를 효과적으로 학습하기 위해 고안된 순환층입니다. 입력게이트, 삭제게이트, 출력게이트 역할을 하는 작은 셀이 포함되어 있습니다.
LSTM 셀은 은닉상태 외에 셀 상태를 출력합니다. 셀 상태는 다음 층으로 전달되지 않으며 현재 셀에서만 순환됩니다.
GRU 셀은 LSTM 셀의 간소화 버전으로 LSTM 셀 못지 않은 성능을 냅니다
총평
혼자서 머신러닝와 딥러닝을 공부하는 것은 생각보다 쉽지 않습니다. 그래서 이 책을 통해 기본기를 다지고 싶다면 충분히 가능할 거 같습니다. 책 내용안에는 다양한 예제와 예시가 있어 공부하는게 무엇보다 쉽게 진행할 수 있습니다. 무엇보다도 머신러닝과 딥러닝을 실습을 위해선 장비 스펙이 중요한데 여기에서는 구글 코랩을 활용하여 실습을 진행이 가능하기 때문입니다.
아무쪼록 머신러닝과 딥러닝 입문서로 최적화 되어 있으니 혼자서도 공부가 가능할거라 생각됩니다. 많은 서적에서 전문적인 예시와 수식을 활용해서 가이드를 해주지만 전공자가 아니라면 이해하기 어렵고 금방 쉽게 지쳐서 포기하게 될것입니다. 마지막으로 혼공 용어노트가 별첨으로 있으니 용어가 어려울시 참고하시면 도움이 됩니다.
참고사이트
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.