본문 바로가기
IT,SW,Data,Cloud,코딩

머신러닝 초보자를 위한 강의와 책 추천

by 착실하게 2021. 8. 26.
반응형

머신러닝 초보자를 위한 무료 강의 추천

 

요즘 머신러닝에 관심이 생긴 초보자들이 많아졌습니다.

 

아마 지금 이 글을 읽고 계신 여러분도 그렇겠지요 ?

 

머신러닝 관련 내용을 배울 수 있는 방법은 다양합니다.

 

그 중에서도 무료로 머신러닝의 세계를 맛볼만한 강의가 어떤 것이 있을지 다들 궁금하실 텐데요.

 

유명한 강의가 있습니다.

 

바로 김성훈 교수님의 모두를 위한 머신러닝 강의 입니다.

 

상세한 리스트는 아래의 링크에서 찾아보실 수 있습니다. 

 

https://hunkim.github.io/ml/

 

모두를 위한 머신러닝/딥러닝 강의

 

hunkim.github.io

 

머신러닝은 왜 필요할까? 

 

이 부분은 김성훈 교수님의 위 강의를 듣고 간단히 요약해본 것입니다. 강의의 인트로 파트 내용 입니다.

 

 

요즘 여기저기서 머신러닝이라고 많이들 말을 하는데 정작 어떤 상황에서 머신러닝이 필요하기 때문에 생겨난 개념인지 모르고 얘기하는 경우도 많습니다.

 

머신러닝이 필요한 이유는 다음과 같습니다.

예를 들면 스팸 메일 필터링을 하려고 할 때, 필터링 규칙을 직접 코딩으로 해주려고 한다면 이런저런 규칙이 너무 많아지기 때문에 이런 로직은 코딩을 하기 어렵습니다.

또한 자율주행과 같은 로직도 직접 코딩해주려면 너무 룰이 많아집니다.

그래서 1959년에 아서 새뮤얼이라는 분이 생각해낸 개념이 머신러닝입니다.

 

머신러닝은 개발자가 룰을 직접 정해주지 않고 데이터를 통하여 기계가 학습해서 배우는 능력을 갖는 프로그램입니다. 

 

머신러닝은 지도학습과 비지도학습으로 나뉩니다.

지도학습은 정답 또는 레이블/라벨/label을 알려주고 학습을 시키는 방식입니다.

유명한 케이스가 있지요. 개와 고양이 사진을 잔뜩 모아서 기계에게 이것은 개 저것은 고양이라고 알려주면서 학습을 시키는 것이 바로 지도학습의 대표본입니다.

지도학습은 regression, binary classification, multi-level classification 의 세 가지가 대표적입니다. 개와 고양이 분류하는 문제는 바이너리 분류에 해당하겠지요.

그런데 정답 레이블을 미리 알려주기 어려운 상황이 분명 많이 있습니다. 예를 들면 구글 뉴스를 그룹핑 하거나, 단어를 분류하는 등의 경우인데요, 이럴 때는 직접 데이터를 보고 학습해보도록 하는 비지도학습이 필요합니다. 

 

텐서플로우란?

파이썬 언어 기반으로 데이터 플로우 그래프를 사용하여 수학 계산을 하는 것이 텐서플로우입니다. 여기서 데이터 플로우 그래프에서는 하나의 연산이 노드로 표현되고 데이터 배열, 즉 tensors 들이 엣지로 표현됩니다. 텐서플로우라는 이름도 바로 이런 데이터들, 텐서들이 흐른다, 플로우한다는 뜻입니다. 

 

참고로 코드는 모두 교수님의 강의 웹사이트와 깃헙을 참고하시면 됩니다. 모든 사람들이 사용할 수 있게 제공되어 있습니다. 

 

 

 

머신러닝 초보자가 읽어볼만한 책 추천

 

저는 모두의 딥러닝 이라는 책의 첫 부분이 머신러닝 초심자들에게, 특히 컴퓨터공학을 전공하지 않은 비전공자들에게 유용한 내용이 들어있다고 생각이 듭니다. 

 

특히 문과 계열을 전공한 비전공자라면 수학적인 부분을 모를 확률이 높은데요. 

 

이 책의 앞 부분에 나름 설명이 들어 있습니다. 

 

엄청 친절한 책은 아니여서 그냥 넘어가는 부분도 분명 있기는 하지만 훑어봐서 나쁘지 않은 책인 듯합니다. 

 

아래의 내용은 모두의 딥러닝 책을 읽으며 간단히 정리해본 내용들이 포함되어 있습니다. 

 

시그모이드(Sigmoid)의 단점과 렐루(Relu)의 장점 

 

시그모이드의 문제점은 모델이 깊어질수록 특성 전달이 안 된다는 점입니다. 이를 vanishing gradient라고 합니다. 그리고 데이터 underfitting이 발생한다는 단점도 있습니다. 그래서 이진 분류 출력층에 주로 사용합니다. 또한, input 값이 일정 이상 올라가면 미분 값이 0에 수렴하며 값이 소멸될 가능성이 커집니다. 

 

입력층과 은닉층에 렐루를 사용하는 것이 요즘의 딥러닝 트렌드라고 합니다. 렐루는 연산비용이 크지않고 구현이 간단합니다. x가 음수인 뉴런이 죽을수 있다는 단점도 있지만 시그모이드에 비교했을 때 우수한 성능을 보여주고 있습니다. 

 

 

CNN, RNN, GAN

  • CNN: Convolution Neural Network
  • RNN: Recurrent Neural Network
  • GAN: Generative Adversarial Network

 

CNN Convolution Neural Network 합성곱 신경망

CNN은 딥러닝의 한 종류입니다. 주로 이미지를 인식하거나 분류하는 데 사용합니다. 오디오 처리도 가능합니다. CNN은 여러 레이어를 거치면서 이미지의 픽셀 정보 중 중요한 특징을 추출하고 학습합니다. 자율주행, 얼굴인식 등 분야에서 이용되는 딥러닝입니다. 

 

Convolution은 CNN 등장 전부터 사용되었습니다. 컨볼루션은 이미지의 특징을 추출하기 위해서 필터가 이미지 위에서 이동하면서 Convolution 연산을 진행함 ( 컨볼루션 연산????)
Stride: 필터가 이동하는 칸의 수를 결정 

Channel: 
ㅡ 이미지의 픽셀 하나하나는 float. 
ㅡ 컬러 사진은 RGB 3개의 실수로 표현한 3차원 데이터. 
하나의 컬러 사진은 3개의 채널로 구성됨. 
red 채널, blue 채널, green 채널의 3개. 

Filter, Kernel 
이미지의 특징을 찾아내기 위한 파라미터. 
CNN 에서 Filter = Kernel 

입력 데이터에 대해서 지정된 간격 (stride)로 순회하며 채널별로 합성곱 연산
이를 통해 feature map 추출. 

Feature Map : 합성곱 연산을 통해 만들어진 행렬. 행렬이므로 이미지로 표현가능. 
Activation Map : Feature Map 행렬에 활성 함수를 적용한 결과. Convolution Layer를 통과한 출력 결과. 

 

활성함수: 신경망에서 입력받은 데이터를 다음층으로 출력할지 결정하는 역할. 활성함수는 x값의 변화에 따라서 0에서 1까지의 값을 출력하는 S자형 함수. Sigmoid Function, Tanh, ReLU (Rectified Inear Unit) 등. 

ㅡ Sigmoid : 로지스틱 함수.

ㅡ Tanh 함수는 sigmoid 함수와 비슷하며, 0에서 1까지의 출력이 아니라 -1에서 1까지의 값을 출력하는 함수. 

ㅡ Relu함수는 x값이 음수일 경우는 모두 0으로 출력하며 결과에서 더 좋은 지표를 보여줌. 

 

Padding: Convolution 레이어에서 Filter와 Stride로 인해 Feature Map의 크기는 입력데이터보다 작음. 그래서 Convolution 레이어의 출력 데이터는 입력 데이터에 비해 크기가 작아짐. Padding이란 위 문제점을 방지하는 방법. 입력데이터의 외곽에 지정된 픽셀만큼 특정 값을 할당 (보통 0으로 할당, 영상분야에서 제로패딩) 

 

Pooling : Convolution Layer와 비슷하게 인접한 픽셀 값 이용. 차이점은 곱하거나 더하는 연산 없음. 이미지의 주요값만 추출해서 이미지의 크기를 축소함. 학습데이터 양이 클때 학습시간 단축가능.

많은 학습 이미지 중에서 지역적으로 사소한 변화가 학습결과에 미치는 영향력 축소 가능함. 


 

 

 

CNN은 크게 2가지로 구분합니다. 

1. 이미지의 특징을 추출하여 학습하는 Feature Learning 파트

2. 학습된 결과를 분류하는 Classification 파트 

 

 

1. Feature Learning 파트 에서는

1.1 Convolution Layer: Filter를 통해 이미지의 특징을 추출

1.2 Pooling Layer : 특징을 강화시키고 이미지의 크기를 줄임

 

CL과 PL을 반복하며 feature를 추출, 학습. 

CL에는 Filter 개수, Filter window size, padding 여부, stride 설정 가능함.

 

입력 데이터에 대한 필터의 크기와 Stride 크기에 따라서 Feature Map 크기 결정. 

 

Convolution Layer의 출력 데이터 크기는 아래 수식의 결과를 만족해야 하고, 결과값은 자연수가 되어야 합니다. 

ㅡ output matrix height = ((input data height + 2 * padding size - filter height) / stride ) + 1 

ㅡ output matrix width = ((input data width + 2 * padding size - filter width) / stride ) + 1 

또한, 다음에 pooling layer가 온다면, feature map의 행과 열의 크기는 pooling의 배수여야 합니다. 

예를 들어 pooling (5 , 5) 라면, 5의 배수인 자연수여야 하는 식. 

이러한 과정을 통해 filter 크기, stride 간격, pooling 크기 및 패딩 크기 조절. 

레이어 쌓기는 가장 단순한 레이어에서 추가해가는 방식으로 쌓는 것이 좋다. 

 

Pooling Layer의 출력 데이터 크기는 아래 수식의 결과를 만족해야 하고, 일반적으로 pooling size는 정사각형이 되도록 합니다. 입력 데이터의 행과 열은 pooling size의 배수여야 합니다. 

ㅡ output matrix height = input height / pooling size

ㅡ output matrix width = input width / pooling size 

 

 

2. Classification 파트 에서는 

분류의 과정

2.1 Flatten Layer : Fully Connected Layer의 인풋을 위한 것. data shape 변경만 수행. 1차원으로 변경됨. 

2.2 Fully Connected Layer: 1차원 배열에 대한 분류를 하는 Fully Connected Layer 를 사용. 1차원 배열로 늘어뜨리기 때문에 Flatten Layer를 사용해서 1차원 배열로 데이터의 shape를 변경하며 이미지의 공간 정보가 손실되지 않음. (??? 무슨말인지 잘 모르겠음 아직) 

2.3 Softmax Layer : 의도한 분류 작업은 이곳에서 이루어집니다. 분류 클래스가 몇 개 인지에 따라 최종 데이터의 shape 는 ( n , 1 ) 이 됩니다 

 

분류 성능을 높이기 위해서 softmax layer를 여러 층 쌓는 것은 효과 없다. 

입력된 데이터에서 특징을 추출하기 위해서 Convolution Layer의 매개변수와 층을 여러가지 방법으로 조절해 보는 것이 좋다.

 

 


순환신경망 RNN Recurrent Neural Network 

데이터가 순서대로 입력될 때, 이전 상태의 정보를 잠시 기억해 놓는 방법
기억된 데이터의 중요도를 판단하여 다음의 데이터로 넘어가기 전에 각기 다른 가중치를 줌
모든 입력 데이터에 대해 이를 실행. 같은 층을 순환하는 것처럼 보임
순서를 가진 시계열 데이터에 적합함
현재 시간의 결과가 다음 시간의 결과에 영향을 미친다. 이러한 일련의 과정이 반복됨. 

LSTM Long-Short Term Memory Netwrok 장/단기 기억 네트워크
새로운 데이터가 계속해서 입력되면서 기존 데이터의 영향력이 조금씩 사라지다가 결국 없어지는 rnn gradient vanishing 해결 위한 알고리즘. 

sine sequence -> lstm 학습 -> 이후에 올 순서열 예측 

 

 


Generative Adversarial Network(GAN)
생성적 적대 신경망을 통해 이미지 생성, 변환, 해상도 증가 등의 구현이 가능하다.

ㅡ Generative: 생성자(Generator), 구분자(Discriminator)라는 두개의 네트워크로 구성된 심층신경망 구조. 생성하는 분포가 학습 데이터의 분포와 점점 유사해짐. 
ㅡ Adversarial: 한 네트워크가 다른 네트워크와 겨루는 구조
ㅡ 잠재변수(z): 데이터의 형태를 결정하는 특징. 직접적으로 나타나지는 않지만 데이터 분포에 영향을 미침. 임의의 데이터 값 x로 매핑. 

[구조]
Noise Vector ㅡ> Generative Network ㅡ> Fake Images ㅡ> Discriminator Network <ㅡ Real Images 

Discriminator Network ㅡ> Predicted Label (Real or Fake) 


생성 모델의 특징: 발견, 생성 중심이다.

Autoencoder의 핵심요소: Encoder, Reconstruction, Decoder.

사용사례: Text ㅡ> Image 생성, Image ㅡ> Image 변환, Image 해상도 증가, 다음 비디오 프레임 예측 

한계: 고해상도 이미지 생성 불가, 학습 불안정, fully connected network 구조 기반

파생모델: DCGAN 등. (*한계 해결 위해 등장함.)

DCGAN (Deep Convolutional GAN )
ㅡ Convolution중심, 배치정규화 사용 
ㅡ 이미지를 생성하기 위해서는 위치 정보가 중요하므로 선형 레이어, 풀링 레이어를 최대한 배제한 Convolution, transposed-convolution 중심의 네트워크 구조.
ㅡ 레이어의 입력 데이터 분포를 조정하여 역전파가 각 레이어에 효과적으로 전달될 수 있도록 배치 정규화사용. 

 Style GAN 
ㅡ 얼굴 이미지를 생성해서 진짜와 가짜 구분 

반응형

댓글