인공지능 쉽게 이해하기: 인공지능과 가위 바위 보 게임을 해본다면?

인공지능과 가위 바위 보 게임을 하려면 일단 상대방이 가위를 냈는지 바위를 냈는지 보를 냈는지 인공지능이 인식을 해야한다. 사람이라면 가위, 바위, 보가 어떻게 다른지 이미 인식을 하고, 알고 있지만 컴퓨터는 그렇지 않다. 우리는 컴퓨터에게 ‘가위는 이러하고 바위는 이러하고 보는 이러해 ^_^’라고 가르쳐 주어야 한다.

이렇게 사람이 컴퓨터를 가르쳐 주는 과정에서 어려운 점이 뭐냐면 같은 가위여도 다양한 변수들이 있다는 거다. 어떤 사람은 손 색깔이 검고 어떤 사람은 손 색깔이 희고 또 어떤 사람은 검지나 중지가 다른 사람보다 길고 또 어떤 사람은 선천적으로 검지가 다른 사람보다 더 꺾여 있다.
만약 이 부분을 사람이 직접 코드를 짜서 ‘손 색깔은 아주 검은 색부터 아주 흰색까지가 있고 손 각도는 이만큼 꺾여 있을 수 있고 손 길이도 이만큼 다를 수 있어 그리고 가위는 엄지 검지가 뻗어있고 다른 손가락들은 다 접혀있어 (어쩌구 저쩌구 쏼라 쏼라~~)’라고 직접 컴퓨터에게 알려준다면 이렇게나 긴 코드가 필요할 것이다.

여기서 전세계의 똑똑한 사람들이 생각한 것이다 “하,,, 이걸 언제 다 코드로 치고 있어,, 컴퓨터 연산시간이 사람보다 빠르니 (컴퓨터 계산기가 사람이 계산하는 것보다 빠름) 컴퓨터가 자기가 직접 그 원칙을 찾아내도록 하는 건 어떨까?”라고 말이다. 이것이 바로 인공지능, 머신러닝이다.
사람이 데이터와 원칙을 주고 답을 얻어내도록 했던 것이 원래의 방법, 원래의 시도(traditional programming)였다면 머신러닝은 답과 데이터를 주고 컴퓨터가 직접 원칙을 찾아내도록 하는 것이다.

그럼 머신러닝은 어떻게 하는 걸까?
먼저 데이터 라벨링(Data Labeling)을 해야한다. 컴퓨터에게 잘 선별된 데이터들을 줄텐데 이 데이터가 무엇인지 컴퓨터에게 말해줘야 한다.

이렇게 데이터를 컴퓨터에게 주면 컴퓨터는 계속 다양한 경우의 수를 조합해보면서 ‘음,,, 손이 세 개가 뻗은 게 가위인가? 아니면 손이 검은 게 가위인가?’ 여러가지 고민(?)을 거치고 라벨링한 데이터끼리의 공통점과 차이점을 대조해보면서 스스로 그 원칙을 찾아내게 된다.
결국 컴퓨터는 “오!!! 알아냈어!!!!! 손 색깔은 다양할 수 있는 거고 손 모양이 검지 중지가 뻗어있으면 가위, 아무 것도 안 뻗어있고 손등만 보이면 주먹, 엄지부터 소지(마지막 손가락)까지 다 뻗어있으면 보자기이군!!!!” 하고 스스로 학습하게 된다. 이게 바로 머신러닝 기본 원리이다.
가위, 바위, 보 인식하는 머신러닝 코드 예시


Convolution(컨볼루션) 설명

<컨볼루션이란?>
하나의 픽셀(중앙 픽셀)을 그 픽셀을 싸고 있는 이웃 픽셀, 자신(중앙 픽셀)에 필터를 적용해 이미지를 변환시키는 것
<그래서,, 컨볼루션이 어디다 쓰이나요?>
컨볼루션을 쓰면 이미지의 특징을 잘 뽑아낼 수 있게 됨 (아래 예시: 이미지의 세로 줄을 훨씬 더 잘 보이게 해서 이미지의 특성을 추출해낼 수 있게 됨)

Pooling(풀링) 설명

<Pooling(풀링)이란?>
4개의 픽셀에서 가장 높은 픽셀 하나를 골라 그것들로 다시 사진을 구성하는 것. 풀링 전 사진이 4 x 4였다면 풀링 이후에는 2 x 2가 됨 왜냐하면 4개의 픽셀 중 가장 높은 픽셀 하나만을 골랐기 때문 (75%의 정보를 버리는 것, 75%의 사진 픽셀을 버리는 것).

<음,, 근데 Pooling 사용하면 이미지 정보의 75%를 잃어버리는 거니까 제가 추출하려는 사진의 특징도 추출하기 더 어려워지는 거 아닌가요?>
Nope!! Pooling 을 사용하면 두가지 큰 장점이 있는데
- Reduction of Computation Time (컴퓨터가 이 사진을 가지고 작업하는 시간 줄여 줌, 어떻게? 그야 사진의 크기가 줄어들었으니 당연한 것)
- Highlight of Character (사진의 특징을 더 강조해줌, 위의 사진을 보면 풀링을 거쳤을 때 세로 줄이 더 잘 보이는 것을 알 수 있음).
이렇게 두 가지 멋진 장점이 있어서 사람들이 이미지 processing할 때 많이 씀. 머신러닝할 때도 씀.
그래서 Convolution 같은 Image Processing은 머신러닝에 어떻게 구체적으로 사용되나요?

가위, 바위, 보 사진을 예로 들면 처음엔 용량도 크고 특징이 강조되지 않은 가위, 바위, 보 사진을 계속 Convolution 하다보면 나중에 가위는 2개의 손가락 모양만을 보여주고 주먹은 0개의 손가락 모양만을 보여줌. 사진을 특정 짓기 쉬워짐. 그래서 Convolution이 머신러닝에 쓰임.

(여기는 제가 참고한 유튜브 영상입니다. 내용이 너무 좋으니 시간나면 한번 보셔도 좋을 거 같아요!)