본문 바로가기

공부방

기계학습에서 딥러닝까지, AI는 어떻게 똑똑해졌을까

인공지능 공부를 하면서 든 생각


어렸을 때 이런 상상을 했다. 공부가 필요 없는 세상. 미래에는 검색만 해도 모든 정보가 나와서 굳이 공부할 필요 없이, 잘 찾기만 하면 되는 그런 세상이 오지 않을까 기대했다. 요즘 내가 클로드나 챗지피티에게 궁금한 걸 물어보고 답을 찾는 것을 보면 이미 그런 세상은 와있는 것 같기도 하다.

그렇다고 공부가 없어지지는 않았다. 인공지능에게 뭐든 물어볼 수 있는 세상이 오면 공부할 필요도 없을 거라고 생각했는데, 아이러니하게도 나는 인공지능에 대해 (얕게나마) 공부하고 있다. (공부를 무엇으로 정의하느냐에 다르겠지만.) 그리고 궁금했다. 인공지능은 어떻게 이렇게까지 똑똑해진 것일까. 인공지능은 기계이지만, 기계는 어떻게 '공부(학습)'를 했길래 무엇이든 물어보면 척척 답을 내놓을 정도가 됐을까. 

쉬지않고 엄청난 양의 지식을 집어 넣은걸까? 기계니까 데이터를 엄청나게 때려박을 수 있다고 쳐도, 그 데이터를 가지고 실제로 어떻게 동작해서 답을 내놓을 수 있는걸까. 인공지능이 지금까지 학습했던 방법에 뭔가 특별한 게 있지는 않을까? 만약 특별한 비법이 있다면, 인간인 내가 그걸 흉내내볼 수도 있을까. 

부트캠프에서 지금까지 머신러닝에 대해 배웠고, 이제 막 딥러닝으로 넘어왔다. 그리고 딥러닝을 소개하는 강의에서 어렴풋이 그 답을 찾을 수 있었다. 조금은 허무하게도 그 답은, "Try and Error"였다. 안되면 될 때까지(?) 반복하면서 시도하라는 단순명료한 명령이 기계를 춤추게 만들었다. 누구나 알고 있을 흔해 빠진 이 말이 인공지능 강의에서도 나왔던 것이다. (누구나 알고 있다고 했지, 누구나 실천하지는 못한다는 게 함정이다.) 그만큼 머신러닝의 학습원칙은 심플했다. 

전통적인 머신러닝은 사람이 규칙을 만들고, 기계가 연산을 하는 식이였다. 소프트웨어 1.5라고도 불리는 이 방식은, 원하는 결과물을 얻기 위해 사람이 먼저 결과물에 영향을 미칠 주요 특징들을 잡아냈다. 그러면 기계는 이 특징에 "랜덤하게" 여러 가지 계산을 넣어보고 그 값에 따라 값을 예측한다. 기계의 학습을 돕기 위해 사람이 지정해준 정답지가 있는데, 기계는 자신이 예측한 값과 정답을 비교해서 오차를 계산한다. 그리고 이 오차가 최소가 되도록, 그러니까 정답에 가장 가까워지도록 만드는 연산을 찾아내는 것이 기계가 하는 일이다. 

최근에 했던 아파트 거래가격 예측 모델을 예로 들어보자. 아파트 가격을 예측하는 머신러닝 모델을 개발하기 위해, 사람이 먼저 아파트 가격에 영향을 주는 주요한 특징들을 설계한다. 아파트가 위치한 동네, 집 면적은 중요할 것 같으니 특징으로 넣어주고, 아파트의 난방 방식같은 건 별로 중요하지 않는 것 같으니 특징에서 뺀다. 몇 가지 특징을 포함한 실거래가 데이터를 기계에 주면, 이제 기계가 할 일은 그 특징에 랜덤하게 연산을 넣고 값을 출력하는 것이다. 동네에는 곱하기 3, 면적은 곱하기 2 이런 식으로 특정한 연산을 넣어주고, 연산 후에 나온 예측값과 실제 정답을 비교해 오차를 계산한다. 이 오차를 줄여나가면서 정답과 가까운 최적의 연산 조합을 찾는 것이 머신러닝이다. (참고로 이렇게 얻은 최적의 연산 집합을 학습이 완료된 '모델'이라고 부른다.) 

여기서 좀 더 발전해서 사람이 직접 특징을 뽑아내지 않고도 기계가 특징을 뽑는 것부터 할 수 있도록 만든 것이 딥러닝이다. 사람은 입력 데이터와 출력값만 주고, 중간에 특징을 뽑아 연산하는 과정은 모두 기계가 하는 것이다. 그래서 딥러닝은 전통적인 머신러닝에 비해 연산이 엄청나게 많고, 자유도가 너무 높아 학습이 어려울 수 있다. 이런 경우 어떤 방식으로 연산을 할지 대략적인 틀을 제공해줄 수 있는데, 이런 틀이 바로 CNN, RNN 이런 것들이다. 

새롭게 뭔가를 배운다는 것이 그런 것 같다. 시도하고, 실패하고, 다시 하는 것. 너무 단순해서 미처 생각하지 못했던 머신러닝의 기본적인 원리는 아기가 스스로 일어서고, 걷고, 뛰기 위해 계속해서 시도하고, 실패하고, 다시 하는 것과 똑같았다. 물론 무한정 try and error를 하고 있을 수는 없으니, 그 뒤로도 훨씬 많은 학습 방법과 최적화를 위한 도구들이 있다. 그렇지만 Try and Error라는 대전제는 변하지 않을 것이다. 기계가 try를 하고 error가 났다고 한탄하고 실증을 내고 학습을 멈춘다고 생각하면 정말 웃프다. (이건 난데..?) 

굳이 결론을 내자면, 인공지능 공부하는 게 어렵고 힘들지만 에러를 보고도 흔들리지 말고 오차를 보면서 조금씩 나아가고 있다는 점을 기억하자. 인생으로 확장할 필요도 없다. 사람이 아닌 기계마저도 이렇게 성공(?)했다. 랜덤한 시작일지라도. 



+ 참고

처음 기계에 학습을 시키려고 했을 때에는 사람이 모든 것을 알려주려고 했다. 사람이 기계에게 규칙을 알려주고, 그 규칙에 맞게 판단하게 만들었다. 흔한 예로, 강아지와 고양이를 구별하는 프로그램을 만든다고 했을 때, 사람이 직접 강아지의 특징과 고양이의 특징을 규정하고, 이런 저런 조건들을 충족하면 강아지, 아니면 고양이. 이런 연산까지도 모두 사람이 설계를 했다. 하지만 이 방식(규칙 기반 프로그래밍 - 소프트웨어 1.0 방식)은 그다지 성과가 없었다.