딥러닝이라는 개념이 각광받는 가운데, 단지 마케팅 용어로 딥러닝을 접하고, 피상적으로만 알고 있는 사람들이 꽤 많다. 정작 이 분야를 잘 알아야 하는 사람들도 그렇다. 예를 들어 흔히 듣는 이야기는 단순한 통계모델로 하면 될 문제를 '딥러닝'으로 풀겠다고 이야기한다는 사실이다. 딥러닝이 성능이 좋다는 말이 널리 퍼지면서, 앞뒤의 맥락없이 그렇게 접근되기 때문이다. 아쉬움 가득한 상황이다. 그래서 오늘은 이 이야기를 간단히 해보자.
딥러닝은 어찌보면 연결주의자들의 꿈이다. 사람들은 오랫동안 기호주의에 의거해 AI 문제를 해결하려고 했다. 즉 if-then의 끊임없는 나열이나, 어떤 단순한 통계 모델을 조합해서 완전하게 설명가능한 AI를 만드는 것이다. 직접 프로그래밍을 한다고 생각해보면 쉽게 이해할 수 있다. 우리가 하는 대부분의 환원주의적인 과학 접근 방식을 닮은 방식이다. 모든 것을 잘게 분할해서 부품을 잘 만든 후 합쳐서 완성품을 만드는 형식이다. 로보트를 그렇게 만들지 않는가. 팔을 연구하고, 다리를 연구하고, 각각을 연구해서 모두 붙인다. 그것이 기호주의가 따르는 방식이다.
그런데 연결주의는 좀 다르다. 최초의 인공 신경망은 이미 1943년(Warren McCulloch, Walter Pitss) 부터 다루어져왔는데, 그저 입력값들에 배정된 가중치를 곱해서, 어느 정도 이상의 합 결과가 나오면 발화된다는 단순한 구조의 반복이다. 신경해부학자들은 말도 안된다며 펄쩍 뛴다고 하지만, 우리네 신경세포를 조금은 닮았다. 인공 뉴런을 계속 병렬로 나열하면 여러가지 입력을 다룰 수 있고, 여러 층을 만들면, 2차원의 신경망이 펼쳐지게 된다. 매우 똑같은 역할을 하는 인공신경 여러개를 연결해서 망을 이루고, 이것을 늘려나가면 복잡한 문제를 풀 수 있을 것이라는 것이 이 인공 신경망의 기대였다. 이미 1950년대에 그런 믿음이 주장될 정도로 이 인공신경망에 대한 기대는 컸다.
얼마나 매력적인가. 복잡한 것을 설계할 필요가 없다. 뉴런을 그냥 늘리고, 신경망 가중치만 적절히 조절해주면 그 복잡한 구조 속에서 복잡한 일을 해내게 될것이다. 물론 아쉽게도(?) 어려운 점이 없는 것은 아니다. 바로 그 모든 노드들의 가중치를 정하는 문제이다. 우리는 이것을 '학습'이라고 이야기한다. 데이터를 통해 이 가중치를 적절한 방식으로 조절해주어야만 신경망은 제 역할을 할 수가 있다.
그런데 이 신경망의 어려움은, 신경망을 얼마나 복잡하게 만들어야 할지, 또한 복잡할수록 이 가중치값이 많아져서, 어떻게 조절을 해야 제대로된 출력을 낼지 알기 어렵다는 사실이다. 그래서 한참 이 신경망은 여러가지 개선 이론에도 불구하고 인기가 떨어졌다. 1969년 마빈 민스키 등이 간단한 신경망에서, 기존의 일반적인 방법으로 풀지 못하는 상황이 있다는 것이 초기 유명한 증명 사례다(XOR문제). 그리고 MLP(다층퍼셉트론-다층신경망)에 대한 학습 해법인 back propagation이 1974년 최초로 박사학위 논문에 등장하고(Paul Werbos), 그 유명한 힌튼 교수도 유사한 방식을 주장하면서(1986년, Geoffrey Hinton) 1980년대에 다시 한번 기대를 받게 된다.
하지만 역시나 신경망이 커지면 이 방법마저도 그다지 효과적이지 않고, 최적값에 수렴하지 못하는 경우가 많다는 것은 역시 단점이었다. 그래서 더 확실히 최적화 가능한, 수학적으로 더 우아한 SVM(2000년 전후까지 강세였던) 같은 방법에 밀려버렸고 2006년경까지 신경망은 그저 연결주의자들의 예측하기 어려운 변덕적인 방법으로 취급받아왔다. 학습할때마다 결과가 다르고, 잘 학습도 안되는 모델일 뿐이었다. 그래서 논문을 제출해도 잘 받아주지도 않았다. 그 시기가 바로 인공신경망의 가장 혹독한 겨울이었다. 연결주의의 암울한 시기이다.
그러다가 이 연결주의(신경망)를 포기하지 않았던 Hinton교수 랩을 중심으로 다양한 방법론이 등장하게 되었다. 초기 신경망의 가중치를 전략적으로 잘 설정하면 된다던가, Auto Encoder라는 방법으로 한층한층 학습을 시킨다던가, 가중치를 합해서 발화를 판별했던 그 활성화 함수를 바꾼다던가(ReLU), 노드들을 일부분 생략하고 학습을 해서 좀더 넓게 학습 결과가 퍼져나가게 하는등(Dropout) 다양한 전략이 소개되었다. 그러면서 전보다 훨씬 더 효율적이 더 큰 신경망을 학습시킬 수 있음을 알게되었다. 이때 바로 소위 논문 accept가 잘 되기 위해서 이 신경망에 deep belief net, deep networks 라는 이름을 붙이기 시작했고, 이것이 딥러닝의 기원이 되었다. 그래서 흔히 사람들이 지칭할때, 좀더 계층도 많고 입력도 많은 신경망을 이제 '딥러닝'이라고 부른다고 표현한다.
" A fast learning algorithm for deep belief nets, 2006년 제프리 힌튼"
" Greedy layer-wise training of deep networks, 2007년 요수아 벤지오"
여하튼 그래서 deep learning이란 큰 신경망이나 깊은 신경망(2차원이니까 입력을 늘릴 수도 있고 층을 늘릴 수도 있으니, 이 경우는 층을 늘리는 의미가 좀더 있겠다. 깊은 층을 만드는 일이다)을 의미한다고 보면 된다. 그러면 얼마나 커야 할까?
이제 2010년이 넘었고, CNN(Convolutional Neural Networks)이 각광받던 시기가 되었다. 사실 저렇게 큰 신경망에 대해서 연구를 했다고 하지만 아직 컴퓨팅 한계 때문에 큰 신경망을 실험하기가 어려웠다. CNN자체는 1998년도에도 논의되었으나 세간에 제대로 히트를 친 것은 2012년이다. Hinton제자중에 Alex와 Sutskever가 게임에나 쓰던 병렬 소수점 연산 프로세서인 GPU를 사용해(Alex의 작품이다) 이미지 인식 대회에서 큰 성능 향상을 이뤄낸다. 바로 AlexNet(2012년)의 탄생이다. CNN과 큰 신경망을 제대로 구현해서 제 시간 안에(?) 학습을 시킨 셈이다. 6천만개 파라메터를 사용했다고 한다. 그정도만 되어도 연산량이 어마어마하다. 그래서 딥러닝이란 이제 큰 신경망 + GPU + 많은 수의 데이터라는 공식이 성립되게 된 셈이다. 물론 숫자 인식 정도는 그리 크지 않은 신경망으로 가능하게 되었지만, 상용으로 쓸 정도의 문제는 대개 예외 처리가 어려운 문제(이를테면 이미지/음성 인식같은)에 대규모의 데이터를 넣어서 큰 신경망으로 해결하는 것이 딥러닝이라고 볼 수가 있겠다.
이후 이런 딥러닝 기술들은 CNN이 주목한 이미지 인식 외에도, 시계열의 데이터를 처리하는, 즉 말의 흐름을 다루는 RNN이나 LSTM같은 시계열 처리로 이루어지고, Google BERT와 GAN을 거쳐 Transformer로 진화하게 되었지만(2010년대에 모두 이루어진 일이다) 그 주요 기반이 신경망인 것은 그다지 변하지 않았다. 그리고 하나 짚고 넘어갈 일은 '생성형'이 유행하게 된 사실이다. 적대적생성신경망(GAN)에서 유래한 이 개념은, 과거에는 단순히 판정에 집중했던 것에 반해서, "이해를 했다면 생성도 가능하다"는 지능의 한 분야를 발전시킨 개념이다. 생각보다 쓸모가 다양하고, 생성형 언어모델로 이끌기 까지 했지 않는가.
좀 여러가지 생략을 했는데, 따라서 딥러닝은 단순한 통계 모형으로 풀기 어려운 복잡한 문제를 지향하고, 큰 신경망과 대량의 데이터, 컴퓨팅을 요구하는것이 기본이다. 물론 LoRA같은 소규모의 부분 튜닝 학습도 존재하기는 하지만 기본적으로는 그렇다. 그리고 단순 수치에 대한 해석과 예측은 별개로 잘 발전한 decision tree류의 모델(gradient boosting모델, LGBM, XGBoost, ..)들도 훨씬 효과적일 때가 많다. 특히 데이터가 부족하고 컴퓨팅이 부족한 실제 산업 현장에서는 요긴하게 사용된다. 또한 딥러닝을 한다고 하면서 파라메터 크기가 몇만개 정도 수준이면 좀 애매하게 볼 수도 있겠다. 복잡한 문제를 풀기에는 너무 작은 크기 아닌가?
그리고 AlexNet 논문의 공저자이자 OpenAI의 수석과학자였던 Sutskever가 논의했던 신경망의 크기도 짚고 넘어가보자. OpenAI를 시작했을때도 이 신경망의 크기를 키우면 잘 될것이라는 아이디어는 결과적으로 상상력이 부족했다. 엄두가 안나는 크기인 수십억, 수백억 파라메터 크기까지 늘리면 잘된다는 사실을 본인도 처음부터 시도한 것은 아니라고 고백하는 인터뷰를 본 적이 있다. 여하튼 그렇게 딥러닝은 이제 수백억 수천억 파라메터를 지닌 크기의 신경망을 다루게 되었다. 하나 더 팁을 주자면 이 크기의 신경망을 학습하기 위해서는 그저 인터넷상에 널려있는 수없는 텍스트 문장이 있으면 되게 되었다. 하나하나 분류 결과가 필요했던 이미지와는 차원이 다른 데이터 금맥이 발견된 셈이다. 그래서 이 엄청난 텍스트 문장 데이터와 거대 신경망 모델이 오늘날의 딥러닝을 대표하지 않나 생각이 든다.
그래서 이러한 배경을 놓고 딥러닝을 이야기하면 조금더 현실적으로 논의할 수 있겠다. 그래서 문제 구분없이, 작은 신경망으로 문제를 해결하면서 딥러닝을 한다고 하는 주장을 하면 아무래도 좀 아쉬운게 많은 것은 연결주의자들의 생각이 아닌가.
'머신러닝AI' 카테고리의 다른 글
Flux.1 을 윈도우+NVidia GPU에서 실행해보자. (5) | 2024.09.06 |
---|---|
AI를 만들고 싶었던 이야기 (1) | 2024.09.05 |
인공지능 신경망의 관측을 통한 뇌 이해가 가능할까? (0) | 2024.05.25 |
윈도우(windows)에서 실행하는 easy_diffusion & kohya_ss (2) | 2024.05.01 |
가장 쉬운 LLM 활용법. ollama와 langchain을 연결해서 사용해보자. (0) | 2024.04.27 |