반복내용 건너뛰기(skip to main content) 본문 바로가기(Go body) 메뉴 바로가기(Go Menu)
G03-8236672469

특별기고

인공지능 프로그램…그리 어려운 것도 아니다

NSP통신, NSP인사 기자, 2021-06-21 10:31 KRD7
#메이플러스

우재현 메이플러스 대표

(서울=NSP통신) NSP인사 기자 = 인공지능을 개발한다는 것이 특별한 지식을 가진 집단의 전유물만은 아니다. 3년 전 시각장애인용 보도 판독 모델을 만들어 화제가 됐던 이는 동탄고 2학년 김윤기군(현재는 대학생)이었고, 중학생 때 강화학습을 습득하여 투자 프로그램을 만든 허예찬군은 지금은 고등학생이 됐다. 인터넷에서 스스로 자료를 찾아 학교에서 가르쳐주지 않아도 누구나 인공지능 모델을 만들어볼 수 있다는 것을 단적으로 보여준 사례들이다.

인공지능 원리를 얼마나 어떻게 쉽게 배울 수 있느냐에 따라 중학생도 쉽게 짜는 프로그램이 되기도 하며, 석사 박사 과정에 있어도 힘들게 짜는 길을 간다. 필자는 그동안 대학원에서 이들을 대상으로 인공지능 프로그램을 강의하며 이들이 프로그래밍에서 어려워하는 부분이 무엇인가를 이해할 수 있게 됐다.

NSP통신-우재현 메이플러스 대표 (메이플러스 제공)
우재현 메이플러스 대표 (메이플러스 제공)

물론 인공지능을 위한 프로그래밍의 여정은 그리 녹녹지는 않다. 수학적인 지식을 습득해야 하고, 트레인과 테스트셋의 분리 과정과, 지도학습과 비지도학습을 나누어서 공부해야 한다. 신경망 구조에서 행렬곱을 이해해야하고, CNN과 RNN 등의 특이한 프로그램 구조를 습득해야 하고, 다양한 문법(sklearn, tensorflow, pytorch, keras)들을 배워야 한다.

또한 새로운 개념(one-hot encoding, softmax, cross-entropy)들을 습득하고 거기 맞도록 프로그램을 구성해야 한다. 그렇게 기초적인 과정을 공부하고 나면 또다시 과적합의 문제를 해결하기 위해 앙상블과 샘플링, 드롭아웃 등의 과정을 거쳐야 하며 용어마저도 익숙지 않은 공부가 계속 이어진다.

G03-8236672469

하지만 쉬운 코드부터 시작해서 핵심적인 내용만 습득하여 한 단계씩 올라가다 보면 그 전체 과정의 프로그램이 그렇게 힘든것도 아님을 스스로 알게 된다.

‘넘파이’와 ‘판다스’ 단계는 기초적인 형태를 만드는 방법만 배운다.
우선, 넘파이의 경우 행렬을 만들고 사칙연산을 할 수 있는 방법만 배운다. 그 이상으로 마스터해야 한다는 강박관념이 있다면 얼른 중단하는 게 좋다. 이후에 다른 소스코드들을 통해 사용법을 익히면 되고, 거기에서 몇 가지 모르는 넘파이 문법이 나오더라도 함수 이름으로 어떤 내용인지 알 수 있기 때문이다. 대부분 라이브러리들이 그렇게 만들어지기 때문에, 초보자인 경우 가장 기초적인 문법만 공부하는 것도 한 방법이다.

판다스의 경우도, 시리즈와 데이터프레임의 개념과 색인 정도만 공부하면 이후에는 다른 소스코드를 읽을 수 있다. 개발자가 아닌 경우 이 용어들이 생소할 수 있으나, 한글로 표현하고 설명을 덧붙이게 되면 오히려 개발자들에게는 익숙치 않고 읽기 불편한 글이 되므로 상세 설명을 생략하기로 한다.

또 머신러닝 알고리즘인 sklearn을 공부할 땐, 지도학습의 경우 대부분 예제(iris, titanic)로 시작하게 되는데, 어느 경우라도 핵심(세 줄 정도)만 완전히 이해하면 된다.

이후 다른 소스코드를 살펴보더라도, 위 세 줄 중에서 가운데 알고리즘 선택 부분만 바뀔 뿐 전체 틀은 똑같음을 알게 된다. 이제 조금 더 들어가자면 train_test_split() 의 입력과 출력이 각각 어떤 의미인지, 이 데이터들을 어떻게 판다스나 넘파이를 활용하는지, 그리고 KNeighborsClassifier의 파라미터들을 조금만 더 공부하면 된다. 여기까지만 공부해보면 머신러닝 프로그램이 너무 쉽게 느껴진다. sklearn에서 비지도학습의 경우도 공통적인 틀만 학습하면 이후는 일사천리다.

지도학습과 비교해서보면, 우선 train_test_split()가 없다. 그리고 model.fit()에서 지도학습과 비교하면 인자가 하나만 들어간다. 비지도학습이기 때문에 답에 해당하는 y가 없다. 이 정도만 공부하면 sklearn으로 지도학습과 비지도학습을 쉽게 접근할 수 있게 된다.

기본틀만 알면 이후에 dropna나 apply와 같은 응용을 하나씩 접하면서 지식을 확장해간다. 처음부터 dropna를 어렵게 접근하다보면 공부해야 할 것이 괜히 많아보이고 멀게 느껴지게 된다. 즉, 이것저것 불필요한 것들까지 공부를 하는 것은 오히려 쉽게 실증을 느끼고 어렵다고 느끼게 만들 뿐이다.

신경망 단계는, 먼저 구조를 만드는 것만 배운다.
이제 다음 단계로, 딥러닝 알고리즘으로 넘어가면 앞서의 머신러닝처럼 단순하지 않고 크게 두 가지 분야를 학습하게 된다. 하나는 신경망 구조를 만드는 부분이고 또 하나는 효과적으로 학습을 시키는 부분이다. 소스코드도 라이브러리마다 조금씩 다르다. 여기서도 이 둘을 동시에 공부하기 보다는 신경망 구조에 대한 이해를 먼저하고, 경사하강이나 역전파와 같은 효과적인 학습 부분은 뒤로 미루는 것이 유리하다.

신경망 구조는 퍼셉트론(perceptron)구조를 만들고 웨이트를 학습시키는 과정을 확실히 이해해야 한다. 한꺼번에 경사하강법(gradient descent)과 역전파법(back-propabation)까지 포함된 소스코드를 접하다보면 대부분 이해를 힘들어하고 포기하게 된다. 따라서 단순한 신경망인 논리 게이트(AND, OR 등) 구조를 만들고 웨이트가 학습되는 부분만 먼저 공부를 하고, 효과적인 학습은 뒤로 미룬다.

1950년대에 만들어진 퍼셉트론에서 시작해서 2012년 AlexNet이 등장하기까지 암흑기를 거치며 긴 시간동안 고민하고 겨우겨우 풀어냈던 문제들을 단시간에 초보자들에게 한꺼번에 주입시킬 수는 없을 것이다. sklearn의 예제에 비한다면 초보자들에게 쉽게 설명한다는 것은 결코 쉬운 일이 아니다.

웨이트가 업데이트 되는 과정까지 이해가 된 이후 서서히 다음 단계를 이해하는 게 좋다. 일반적으로 기존 소스코드로만 시작하다보니 알고리즘을 완전히 이해하지 못하고도 코드가 작동을 해버려 본인의 이해도를 과대평가 하는 현상도 일어난다. 그래서 그 이후 나오는 경사하강법이나 역전파 등에서 버그가 발생하면 초보자는 사실 어떻게 접근할 지를 모른다.

우선은 웨이트가 업데이트 되는 부분만 확실히 이해하면 다음 단계는 쉽다. MLP(Multi-Layer Perceptron)를 이해했다고 봐도 되고, 그 이후 CNN이나 RNN으로 옮겨가면 전체 큰 알고리즘에 대해 거부감 없이 이해가 된다. 그러다보면 생각보다 빨리 인공지능개발 실력이 썩 높아져있는 자신을 발견하게 된다.

NSP통신 people@nspna.com
저작권자ⓒ 한국의 경제뉴스통신사 NSP통신·NSP TV. 무단전재-재배포 금지.