본문 바로가기
컴퓨터공학/기초

기계 학습(ML; Machine Learning) 및 인공 지능(AI; Artificial intelligence)

by 하이방가루 2022. 11. 27.
728x90
반응형

이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다.

  기본적으로 컴퓨터는 방대한 양의 데이터를 저장하고 정리하며, 가져오고 처리한다. 이는 수백만 개의 아이템을 판매하는 웹 사이트의 전자상거래나 의사가 신속하게 접근할 수 있는 수십억 건의 건강 기록 저장과 같은 작업에 이상적이다. 그러나 우리가 컴퓨터를 단지 데이터를 가져와서 표시하는 데에만 사용하지 않고 데이터에 관한 결정을 내릴 수 있게 한다면 어떨까? 이것이 기계 학습의 본질이다.

  컴퓨터에게 데이터로부터 배울 수 있는 능력을 주고 그에 대한 예측 및 결정을 내릴 수 있는 알고리즘을 가진 컴퓨터 프로그램은 극도록 유용해서 다음과 같은 질문에 대답할 수 있다.

 이 이메일은 스팸인가?

 사람의 심장에 부정맥이 있는가?

 YouTube에서 이 동영상 뒤에 어떤 동영상을 추천해야 하나?

이러한 프로그램은 유용하지만, 이를 인간의 지능과 같은 방식으로 똑똑하다고 설명하진 않을 것이다. 따라서 용어가 종종 바뀔지라도, 대부분의 컴퓨터 과학자들은 기계 학습이 인공 지능이라는 더욱 야심 찬 목표에 놓인 일련의 기술이라고 말한다.

 

  기계 학습 및 인공 지능 알고리즘은 꽤 정교한 경향이 있다. 그래서 기계가 어떻게 작동하는지를 헤집기보다는, 알고리즘이 개념적으로 무엇을 하는지에 집중할 것이다. 나방이 루나 나방인지 나방 황제 인지를 결정하는 간단한 예제부터 시작해 보겠다. 이 결정 과정을 분류(Classification)라고 하며, 이를 수행하는 알고리즘은 분류자/분류기(Classifier)라고 한다.

  사진이나 소리와 같은 원시 데이터를 사용해 훈련시킬 수 있는 기술이 있지만 많은 알고리즘은 현실세계의 사물과 현상의 복잡성을 줄인다. 이를 Features(특징, 성분)라고 한다. Feature는 우리가 분류하고 싶은 것들을 유용하게 특징화하는 값을 말한다. 나방 예를 들자면 두 가지 특징("날개 폭"과 "질량")을 사용할 수 있다. 좋은 예측을 하는 기계 학습 분류자를 훈련하기 위해서는 훈련 데이터(Training Data)가 필요하다. 그것을 얻기 위해, 곤충학자가 루나와 황제 나방에 대한 데이터를 수집해야 한다. 이 전문가들은 다른 나방을 인식해서 특징 값을 기록할 뿐 아니라, 실제 나방에 라벨(Label)을 붙여 데이터를 수집할 수 있다. 이를 분류된 데이터라고 한다.

산점도(Scatter plot)

  두 가지 특징만 있기 때문에 산점도에서 이 데이터를 쉽게 시각화할 수 있다. 위에 산점도에는 100마리 황제 나방(빨강)과 100마리 루나 나방(파랑)에 대한 데이터이다. 산점도를 통해서 두 그룹으로 나뉘는 것을 볼 수 있다. 하지만 중간에 약간 겹침이 있어서 둘을 분리하는 최상의 방법은 전체적으로 명확하지 않다. 최적의 구분을 찾는 것! 그것이 기계 학습 알고리즘이다.

  그저 눈으로 데이터를 보고 판단한다면 날개 길이 45mm 미만의 어떤 것이 황제 나방이 될 가능성이 있다고 말할 것이다. 추가적으로 다른 분할을 추가할 수 있다. 황제 나방이려면 질량이 0.75g 이하여야 한다고 말이다.

의사 결정 공간(Decision Space)을 꽉 막는 이러한 선들을 의사 결정 경계(Decision Boundary)라고 부른다. 데이터를 자세히 보면 86마리의 황제 나방은 정확하게 황제 결정 지역 안에 있지만 14마리의 황제 나방은 루나 나방 지역에서 부정확하게 머무를 것이다. 반면 82마리의 루나 나방은 옳은 지역에, 18마리는 잘못된 공간에 떨어져 있다.

오차 행렬(Confusion Matrix)

  분류자가 옳고 그름을 어디에서 얻을지를 보여주는 이러한 테이블을 오차 행렬이라고 한다. 100% 정확도를 제공하는 선을 그릴 수 없다는 것에 주목하라. 만약 날개 폭 결정 경계를 낮추면, 황제 나방을 루나처럼 잘못 분류한다. 경계를 키우면, 루나 나방을 잘못 분류한다.

  기계 학습 알고리즘의 작업은 높은 수준에서 오류를 최소화하면서 정확한 분류를 최대화하는 것이다. 200개의 훈련 데이터에서 168개의 일치하는 나방 수와 32개의 불일치하는 나방 수로 평균 분류 정확도는 84%이다.

  이제 이러한 결정 경계를 사용하여 숲으로 나가서 알려지지 않은 나방을 만난다면, 나방의 특징(날개 폭과 질량)을 측정하고 우리의 의사 결정 공간에 표시할 수 있다. 이것은 이름이 지정되지 않은(UnLabled) 데이터이다. 우리의 결정 경계는 이 나방이 어떤 종인지 묻는 것에 대한 추측을 제공할 수 있다.

결정 트리(Decision Tree)

  의사 결정 공간을 상자로 나누는 이 간단한 접근법은 결정 트리(Decision Tree)로 나타낼 수 있으며  코드로는 if문을 사용하여 프로그램을 만들 수 있다. 결정 트리를 생성하는 기계 학습 알고리즘은 무엇이 특징인지를 선택하고 나누어야 한다. 그리고 그 각각의 특징에 대해 분할하는 데에 사용할 값이 필요하다. 의사 결정 트리는 기계 학습 기술의 단지 하나의 기본 예시일 뿐이다. 컴퓨터 과학 문헌에는 수백 가지 알고리즘이 있다. 몇 가지 알고리즘은 많은 의사 결정 트리를 알고리즘 과정에 함께 사용해 예측한다.

서포트 벡터 머신 (SVM)

  또한 서포터 벡터 머신(SVM; Support Vector Machine)과 같은 트리 기반이 아닌 접근 방식도 있으며, 근본적으로 임의의 선으로 의사 결정 공간을 분할한다. 그리고 이 선은 직선일 필요는 없다. 다항식이나 다른 수학 함수가 될 수도 있다. 전과 마찬가지로, 기계 학습 알고리즘의 일은 가장 정확한 의사 결정 경계선을 찾아내는 것이다.

  이제까지 예제에는 사람이 이해 가능하게 두 가지 Feature만이 있었지만, 세 번째 Feature(길이)를 추가하면 2D 라인은 3D 평면이 되고, 결정 차원을 3차원으로 생성한다. 이 면들은 곧을 필요는 없다.

게다가, 정말로 유용한 분류자는 많은 다른 나방 종들을 다룰 것이다.

 

  이제 여러분이 직접 의사 결정 경계를 알아내기에는 매우 복잡해져 간다는 것에 동의한다고 생각된다. 그러나 이것조차 매우 기본적인 예이다. 단지 세 가지 특징과 다섯 종의 나방만이 있다. 이 3D 산점도에서는 여전히 이를 시각화할 수 있었다. 하지만, 불행하게도 한 번에 네 가지 특징 또는 그 이상의 특징을 시각화할 수 있는 좋은 방법은 없다. 이것은 실제로 많은 기계 학습이 직면한 문제이다. 수천 차원의 의사 결정 공간에서 졸졸 흐르는 초평면(HyperPlane)의 방정식을 알아내는 것을 상상할 수 있습니까? 아마도 할 수 없을 것이다. 그러나 영리한 기계를 갖춘 컴퓨터 학습 알고리즘은 할 수 있고, Google, 페이스 북(메타), 마이크로소프트 및 아마존과 같은 곳의 컴퓨터들에서 하루 종일 하고 있다.

 

  의사 결정 트리나 서포트 벡터 머신과 같은 기술은 데이터를 사용하여 의사 결정을 내리는 통계학(Statistics)에 깊은 뿌리를 두고 있다. 컴퓨터가 존재하기 전에 오래전부터 존재했다. 널리 사용되는 통계적 기계 학습 기술의 매우 큰 클래스가 있지만, 통계학에 기원이 없는 접근법도 있다. 가장 주목할 만한 것은 우리 두뇌의 뉴런에서 영감을 얻은 인공 신경망(ANN; Artificial Neural Networks)이다.

  생물학적 뉴런 뇌관의 경우, 기본적으로 뉴런은 신호를 처리하고 전기 및 화학 신호를 사용하는 메시지를 전달하는 세포이다. 뉴런은 다른 세포에서 하나 이상의 입력을 받아 신호를 처리한 다음 자신의 신호를 방출한다. 이 거대한 상호 연결된 네트워크 형태는 복잡한 정보를 처리할 수 있다.

인공 뉴런

  인공 뉴련은 생물학적 뉴런과 매우 비슷하다. 각각은 일련의 입력을 받아서 결합하고, 신호를 내보낸다. 전기 또는 화학 신호가 아닌, 인공 뉴런은 숫자를 가지고 입력을 받고 숫자를 뱉어낸다. ANN은 링크에 의해 연결되어 있는 계층으로 조직되어 뉴런 네트워크를 형성한다.

  신경망이 분류에 어떻게 사용될 수 있는지 보기 위해 나방 예시로 돌아가 보자. 첫 번째인 입력단계(Input Layer)는 분류가 필요한 한 마리 나방의 데이터를 제공한다. 다시, 질량과 날개 길이를 사용한다. 다른 끝에는 출력 단계(Output Layer)로 하나는 황제 나방, 하나는 루나 나방이다. 두 단계 사이에는 숨겨진 층(Hidden Layer)이 있어, 입력을 출력으로 전환하는 어려운 분류 작업을 한다.

 

  이 작업이 어떻게 수행되는지 확인하기 위해서, 숨겨진 층의 한 뉴런을 살펴보자. 뉴런이 하는 첫 번째 일은 각각의 입력에 특정 가중치(Weight)를 곱하는 것이다. 첫 번째 입력에 대해 2.8, 두 번째 입력에 대해 0.1을 곱한다고 가정해 보자. 그리고 가중 입력을 더하는데 이 경우에는 총합이 9.74이다. 그런 다음 뉴런은 이 결과에 바이어스(Bias)를 적용한다. 즉, 고정된 값(예: -6)을 더하거나 뺀다. 이제 새 값인 3.74를 얻는다. 이러한 바이어스 및 입력 가중치는 초기에 신경이 만들어질 때 무작위 값으로 설정된다. 그런 다음 알고리즘이 들어가서 훈련 데이터를 통해 신경망의 모든 값들을 변경하기 시작한다. 이때 훈련 및 테스트를 위해 분류된 데이터를 사용한다. 이것은 많은 상호 작용에서 점차적으로 정확도를 향상하며 발생한다. 인간의 학습 과정과 매우 닮아 있다. 마지막으로 뉴런에는 전달 함수라고도 불리는 활성화 함수(Activation Function)가 있다. 이것이 출력에 적용되면 결과를 위한 최종 수학적인 수정이 수행된다. 예를 들어 음수 1에서 양수 1로 범위를 제한하거나 음의 값을 0으로 설정한다. 우리는 값을 변경하지 않고 전달하는 선형 전달 함수를 사용할 것이다. 그러므로 3.74는 3.74로 유지된다. 따라서 예제 뉴런의 경우, 입력이 0.55와 82이면 출력은 3.74가 된다. 

  이것은 단지 하나의 뉴런이지만, 가중, 합산, 바이어스 및 활성화 함수를 적용하는 이 과정은 모든 레이어의 뉴런에 대해 계산되며, 그 값은 네트워크에서 한 번에 하나의 레이어로 전달된다. 중요하 점은 숨겨진 레이어는 단 하나의 층이 아니라 아주 깊고 많은 층이 될 수 있다는 것이다. 이것이 딥러닝(Deep Learning)이라는 용어의 기원이다.

이러한 복잡한 네트워크에 대한 훈련은 더 많은 계산 및 데이터를 취해야 한다. 신경 네트워크가 약 1950년 전에 발명된 사실에도 불구하고, DNN(Deep Neural Network; 깊은 신경망)은 최근에야 강력한 프로세스 덕분에 실용적이게 되었고, 훨씬 더 빠른 GPU 덕에 발전할 수 있었다. 몇 년 전, 구글과 페이스북은 인간뿐만 아니라 사진에서 얼굴을 찾을 수 있는 신경망을 보여주었다. 사람은 이것에 능숙하다. 이는 거대한 이정표였다. 이제 DNN이 자동차를 운전하고, 인간의 언어를 번역하고, 건강 상태를 진단하며 훨씬 더 많은 일을 한다.

 

  이러한 알고리즘은 매우 정교하지만 "지능적"이라고 기술되어야 하는지에 대해서는 명확하지 않다. 알고리즘은 나방 분류, 얼굴 찾기, 언어 번역과 같은 하나의 일을 할 수 있다. 이 유형의 AI는 약인공지능(Week AI) 또는 Narrow AI라고 불린다. 이는 특정 업무에만 특화되어 있다. 그러나 이것이 유용하지 않다는 것은 아니다. 진단을 내릴 수 있는 의료 기기와 자신을 스스로 주행시킬 수 있는 차는 훌륭하다. 그러나 음악을 작곡하고 자유시간에 맛있는 음식을 찾아보는 그런 컴퓨터가 우리에게 필요할까? 그것은 다소 멋져 보일 수 있지만 그렇지 않을 것이다. 진정으로 똑똑하고 인간처럼 다재다능한 범용 인공지능을 강인공지능(Strong AI)라고 부른다. Wikipedia 기사, 웹 페이지 및 Youtube 비디오와 같은 디지털화된 지식의 폭발은 강인공지능을 빠르게 발전하게 한다. 우리는 하루에 Youtube를 최대 24시간까지만 볼 수 있지만, 컴퓨터는 수백만 시간을 볼 수 있다. 예를 들어, IBM의 Watson은 Wikipedia의 전문을 포함한 2억 페이지의 콘텐츠 정보를 참고하고 통합하여 강인공지능은 아니지만 꽤 영리하다. 2011년 Jeopardy에서 인간과 경쟁을 압도했다.

 

  AI는 엄청난 양의 정보를 먹어치울 수 있을 뿐 아니라, 시간을 거쳐 인간보다 훨씬 빠르게 배울 수 있다. 2016년 Google은 극도로 복잡한 보드게임(바둑)을 하는 Narrow AI인 AlphaGo를 데뷔시켰다. 최고의 인간 선수를 능가하는 방법 중 하나는 수백만 번의 자가 복제를 사용하는 것이다. 효과가 있는 방법과 그렇지 않은 것을 배웠고, 그 방법을 따라 성공적인 전략을 발견했다. 모두 저절로 말이다. 이를 강화 학습(Reinforcement Learning)이라고 하며, 매우 강력한 접근 방식이다.

  사실, 이것은 인간이 배우는 방식과 매우 흡사하다. 사람들은 마법으로 걷는 능력을 얻지 않는다. 그것을 알아내는 데에 수천 시간의 시행착오가 걸린다.

 

  컴퓨터는 이제 시행착오를 통한 학습의 끝부분에 놓여 있다. 그리고 많은 정밀한 문제들에 대해 강화 학습은 이미 널리 사용된다. 기대할 수 있는 흥미로운 것은, 학습 기술의 유형을 광범위하게 적용시켜서 아이가 배우는 것과 같이 배우지만 초고속으로 배우는 인간과 같은 강력한 인공지능을 만드는 것이다. 이런 일이 발생한다면, 인간성에 대한 커다란 변화가 있을 것이다.

728x90
반응형

'컴퓨터공학 > 기초' 카테고리의 다른 글

자연어 처리 (NLP; Natural Language Process)  (0) 2022.12.24
컴퓨터 비전(CV; Computer Vision)  (0) 2022.12.11
암호화(Cryptography)  (0) 2022.11.20
해커 및 사이버 공격  (0) 2022.11.13
사이버 보안  (0) 2022.11.06

댓글