brunch

페드로 도밍고스의 머신러닝
쇼케이스 (8) 종합

[책을 읽고] 페드로 도밍고스의 <마스터 알고리즘> (8)

by 히말


마스터 알고리즘이라는 것이 과연 존재할 수 있을까? 이것이 페드로 도밍고스가 제시하는 마스터 알고리즘의 비전에 대해 듣고 나서 드는 첫 생각이었다. 당시에는 그의 의견에 많이 기울었던 것이 사실이다. 그렇지 않았다면 내가 왜 이 나이에 파이썬을 배우는 모험을 감행했겠는가. 그러나 조금이지만 머신러닝을 공부한 지금의 나는 생각이 조금 다르다. 간단히 말해, 뛰어난 화술의 마케터에게 당했다는 느낌을 떨치기 어렵다.


사람들이 '나비효과' 만큼이나 뜻을 잘못 알고 쓰는 단어 중 하나가 바로 '메타'다. '메타'란 다름아닌 '자신에 관한'이라는 뜻이다. '고차원의'라는 뜻이 아니다. (하긴, 소크라테스의 지혜를 생각하면 자신에 관한 것이 가장 고차원적이기는 할 것이다.) 따라서 메타학습이란 학습에 관한 학습이다. 머신러닝 알고리즘은 거의 모두 바로 메타학습 차원을 가지고 있다. 메타학습을 조절하기 위한 매개변수를 하이퍼패러미터라 부른다.


예컨대 싸이킷런에서 랜덤 포레스트를 통해 모형을 학습시키려면, 나무를 몇 그루나 심을 것인지 (의사결정트리를 몇 개 돌릴 것인지), 오류값 되먹임으로 인한 학습보정(learning rate)은 어느 정도로 할 것인지 등등을 정해야 한다. 심지어 (교육 용도 외에는 필요없지만) 랜덤 시드를 어떤 숫자로 할 것인지 정하기도 하는데, 머신러닝 쪽 사람들은 전부 다 우주를 여행하는 히치하이커들인지 보통 42로 정한다.


페드로 도밍고스의 마스터 알고리즘은 '마르코프 논리 네트워크'라는 것인데, 사후 확률을 평가 도구(evaluation tool)로, 경사하강법과 유전 탐색을 최적화기(optimizer)로 사용한다. 뭔가 엄청나 보이지만 (실제로 2020년 10월의 내게도 그렇게 보였고), 사실 지금 파이썬에서 돌아가는 머신러닝 알고리즘은 이미 이와 유사한 형태로 되어 있다. 예를 들어 보겠다.


RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=16, max_samples=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=500, n_jobs=None, oob_score=False, random_state=42, verbose=0, warm_start=False)


동요하지 말자. 위의 문장(?)은 싸이킷런에서 랜덤 포레스트 모형을 하나 만들어 매개변수를 표시한 것이다. 하나씩 뜯어보면, 부트스트랩을 사용하고(bootstrap=True), 의사결정트리의 분화 함수로는 지니불순도를 쓰고 있으며(criterion='gini'), 나무는 500그루를 심으라고(n_estimators=500) 되어 있다.


dense1 = keras.layers.Dense(100, activation='sigmoid', input_shape=(784,))

dense2 = keras.layers.Dense(10, activation='softmax')


위 코드는 텐서플로(케라스)에서 심층 신경망을 훈련시키기 위한 세팅이다. 2개의 층을 준비했고, 첫 번째 층은 활성화 함수로 시그모이드(저자가 애정해 마지 않는 바로 그 S자 곡선)를 쓰는 100개의 뉴런으로, 두 번째 층은 활성화 함수로 소프트맥스를 쓰는 10개의 뉴런으로 되어 있다. 소프트맥스를 쓰는 것으로 보아 다중 분류다.


상기 코드에서 첫 번째 층의 활성화 함수는 굳이 시그모이드일 필요가 없다. 렐루(ReLU) 함수나 하이퍼볼릭 탄젠트(tanh) 함수를 써도 된다. 층을 쌓은 다음에는 변환이 필요한데, 이때 손실함수와 최적화기를 지정해야 한다.


model.compile(optimizer='sgd', loss='sparse_categorical_crossentropy', metrics='accuracy')


최적화기는 sgd, 즉 확률적 경사하강법이 지정되었다. 따라서 페드로 도밍고스의 '마스터 알고리즘'과 같은 최적화기를 쓰는 것이다. 경사하강법은 의사결정트리와 같은 예외적인 경우를 제외하면 거의 아무데나 쓰이는 최적화기다. (요즘은 더 좋은 신제품들이 많이 나와 있어 좀 밀리는 형국이기는 하지만, 신제품들의 작동원리도 기본적으로는 sgd다.)


코드를 조금 공부하고 나서야 명확하게 보이는 것이지만, 사실 신경망의 가장 간단한 형태는 다른 것도 아니고 무려 선형회귀와 같은 것이다. 내가 밥벌이를 했던 바로 그 선형회귀 말이다. 바로 그 단순 신경망, 즉 단층 퍼셉트론은 페드로 도밍고스가 말하는 대로 XOR 연산자조차 표현하지 못하는 한심한 친구였다. 이렇게 머신러닝의 다양한 알고리즘들은 사실 서로 연관되어 있다.


SVM이란 은닉 층이 S자 곡선 대신 커널로 구성되고, 출력이 또다른 S자 곡선 대신 선형결합으로 되어 있는 다층 퍼셉트론일 뿐이다. (392쪽)



결론적으로, 페드로 도밍고스가 준비하고 있는 것은 지금까지 나온 머신러닝 알고리즘의 개량형 중 하나가 될 것이다. 세상에 없던 무지막지하게 새로운 뭔가일 가능성은 상당히 낮다.


그러나 잠깐. 지금 내가 2020년에 내가 읽었던 최고의 책을 폄하하고 있는 걸까? 절대 아니다.


당신이 지금의 머신러닝에 만족하지 못한다면 새로운 머신러닝을 발명하라. 아니면 단지 재미 삼아 시도해 보라. 내가 가장 바라는 희망 사항은 당신이 이 책을 읽고 20년도 넘은 옛날에 내가 처음 인공 지능 책을 읽고 보인 반응과 같은 반응을 보이는 것이다. (465쪽, 맺음말)



그렇다. 페드로 도밍고스는 내가 가던 길을 멈추고 책에 밑줄을 치게 했으며, 같은 책을 두 번 세 번 읽게 했고, 파이썬을 공부하고 주피터 노트북을 깔게 했다. 지금 나는 머신러닝의 신세계를 만나 마치 새로운 언어를 알게 된 아이와 같은 상쾌함을 즐기고 있다. 신세계를 열어준 페드로 도밍고스에게 내가 어찌 감사하지 않겠는가.




Pedro-Domingos-Data-Science-Summit_edited.jpg?type=w1







keyword
매거진의 이전글둔필승총