Sung Kim님의 유투브 강의 자료인 PytorchZeroToAll를 바탕으로 공부한 내용에 대한 글입니다.
머신러닝과 딥러닝의 기초적인 이해와 pytorch 활용 능력을 향상 시키는 것
기초 선형대수와 확률론, python에 대해 익힐 것이다.
Machine Learning이 무엇인지에 대해 이야기하기 전에 Human Intelligence에 대해 생각해 보아야 한다. 우리는 intelligence를 통해 많은 결정을 만든다. 예를 들어, 점심으로 무엇을 먹을지 고른다고 생각해보자. 먼저, 우리가 해야 할 것은 우리가 그동안 무엇을 좋아하고, 싫어했는지와 같은 몇가지 정보를 얻어야 한다. 이런 모든 정보를 사용하여, 우리는 점심으로 피자를 먹는다과 같은 결정을 내릴 수 있다. 이것은 한가지 결정을 하는 전형적인 방법으로 몇가지 정보를 사용하여 한가지 결정을 내린다. 또한, 몇가지 이미지가 우리에게 제공될 수 있고, 이 이미지가 무엇인지 질문 받을 수 있다. 이때, 우리는 이미지 정보를 입력받아 대답을 할 수 있다. 그리고 정보만 주어진다면 4시간동안 공부한 학생들의 시험 성적을 맞추는 문제에 대해서도 적용시킬 수 있다. 이렇게 몇가지 정보를 사용하여 답을 내리는 것이 Human Intelligence이고, 이 과정은 Machine Learning도 다르지 않다.
숫자 2라고 적힌 이미지를 기계가 입력으로 받았다고 생각해보자. 기계는 이미지의 픽셀로 정보를 입력받을 것이고, 초기 기계는 정말 멍청하게 이 이미지가 숫자 2인지 무엇인지 알 수 없을것이다. 따라서, 우리는 기계에게 숫자 2의 이미지라고 가르쳐야한다. 이 과정을 Training(학습)이라고 부른다. 학습이 이뤄지기 위해서는 학습에 필요한 이미지들과 각각의 이미지에 맞는 라벨(label)이 존재해야 하고, 이미지와 라벨들을 합쳐 dataset이라고 부른다. 그리고 많은 dataset으로 기계를 학습시킨다. 학습 후에 기계에게 숫자 2의 이미지를 입력하면 정답을 답할 것이다. 이것은 우리가 Machine Learning이라고 부르는 이유이다.
만약 1시간 공부한 학생은 성적 2점을 받았고, 2시간 공부한 학생은 4점, 3시간 공부한 학생은 6점을 받았다면, 4시간 공부한 학생이 받게 될 성적을 예측해보는 Machine Learning을 만든다고 해보자. 이때 1시간, 2시간, 3시간 공부한 학생들의 성적 정보는 training dataset이라고 부르고, 4시간 공부한 학생의 성적 정보는 test dataset이라고 부른다. 이것과 같이 우리가 원하는 답을 알기 위하여 기계를 학습시키는 것이 전형적인 Machine Learning의 Concept이다.
AI machine learning과 deep learning은 차이가 있다. 일반적으로 AI는 가장 넓은 개념으로 몇가지 많은 방법들로 분류된다. 그 중 하나가 machine learning이다. 그리고 이 machine learning에도 많은 알고리즘이 있고 그 중 하나가 neural net을 사용하는 deep learning이다. Neural net은 많은 layer를 가지고 있기 때문에 우리는 deep learning이라고 부른다.
우리가 deep learning에 주목하는 이유로 간단한 대답은 현재 매우 잘 동작하기 때문이다. 예를 들어 Visual question answering이 있다. 이미지를 입력하고 몇가지 질문을 하면 딥러닝이 알고리즘을 통해 알맞은 답을 출력한다. 또한 어떤 이미지를 입력하면 그 이미지의 스타일을 바꿔 새로운 이미지를 만드는 것도 가능하다.
사실 우리는 딥러닝 없이도 프로그램 개발을 할 수 있다. 이러한 프로그램들을 Rule-based system이라고 부른다. 이때 우리는 가능한 모든 입력을 고려하여 프로그램의 규칙을 설계하고 우리가 원하는 출력이 나오기를 희망한다.
Classic machine learning은 이러한 규칙을 설계하는 것 대신 모델이 자동으로 규칙을 학습한다. 하지만 한가지 제한은 학습을 위해 좋은 입력을 제공해야하며, 이러한 입력을 feature라고 부른다.
Representation Learning은 우리가 좋은 feature인지, 나쁜 feature인지 선택할 필요가 없다. 가능한 모든 입력을 주어주고 여러 layer들을 통과하면서 각 feature가 좋은지 나쁜지 구분하여 좋은 feature만 골라 결과를 출력한다.