남들에게 가르치듯이 공부하다보면 단기기억에서 장기기억으로 넘어가면서 더 효과적으로 공부할 수 있다는 파인만의 공부법에 따라 앞으로 AI와 관련해서, 기본적인 개념들을 쉽게 설명하는 형태로 글을 써보면서 딥러닝 개념들을 정리해보려고 한다.
1. AI 정의
인간은 오래 전부터, 인간을 대체할만한 수준의 지능을 가진 인공지능(오늘날에는 AGI)을 구현해내려고 했다.
인공지능이란, "인간이 할 수 있는 모든 Task들을 할 수 있는 지능"을 의미한다.
그동안 컴퓨터와 대화할 수 있는 프로그래밍 언어를 통해서 인공지능을 만드는 노력들을 하면서 수학 계산 등의 처리는 가능해졌지만, 인간은 오감을 가지고 있기 때문에 소리, 시각과 같은 처리에 있어서는 프로그래밍 언어만으로는 한계가 보이기 시작했다.
예시로, 인간보다 컴퓨터는 수학적인 계산 등을 더 빨리할 수 있지만, 어떤 사진이 주어졌을 때 이 사진이 고양이인지 파악하는 것은 훨씬 못한다. 그 이유는 수학은 바로 계산하는 로직밖에 없지만, 실제로 인간이 수행하는 테스크 중에서는 여러 감각으로부터 받는 정보를 보고 종합적으로 판단하는 추론하는 능력이 필요한 테스크가 있기 때문이다.
실제로 개옷을 입은 고양이, 호랑이 탈을 쓴 사람들을 사람이 설계한 규칙(룰)을 통해서 일일히 다 정해서 프로그래밍을 하는 것은 비효율적이고 새로운 규칙이 생길 때마다 만들어야하는 불편함이 있다. 하지만 인간은 어떤 룰이 있다기 보다는 기존 고양이에 대해 알고 있는 정보 + 실제 사진을 보고 이해한 정보를 종합해 판단하기 때문에 프로그래밍적인 방식과는 다르다.
2. 머신러닝이란?
이렇게 새로운 감각 처리들을 컴퓨터가 어떻게 처리할지에 대해서 인간이 수동적으로 알고리즘을 설계하기에는 매우 복잡하고 예외 케이스가 많기 때문에 새로운 방법을 찾는 노력들이 생겨났다.
인간의 학습방식을 차용해보는 방법론이 오늘날의 머신러닝의 시작점이라고 볼 수 있다. 인간은 위 사례들에 대해서 단순히 룰을 세워서 판단하지 않는다. 태어났을 때부터 바로 고양이를 구분하지 못한다. 여러번 고양이를 보고 고양이에 대한 지식을 쌓으면서 차차 고양이를 분별할 수 있는 능력이 생겨난다.
컴퓨터도 인간처럼 여러 개의 고양이 사례들을 보여주고 알아서 고양이를 구분할 수 있게 해주면 되지 않을까?가 오늘날의 머신러닝의 주요 접근법이라고 볼 수 있다. 인간처럼 기계도 학습을 시키는 것이기 때문에 용어 자체도 Machine Learning이라고 정의를 내렸다.
위키백과의 정의(출처 : 링크)를 가져와보면,
기계 학습(機械學習) 또는 머신 러닝(machine learning)은 경험을 통해 자동으로 개선하는 컴퓨터 알고리즘의 연구이다.
기존의 프로그래밍 방식(룰베이스 방식)과 비교해보면 아래와 같다.
1. 룰베이스 방식 : 실제 고양이를 구분할 수 있는 알고리즘을 인간이 직접 설계한다. 하지만 인간 역시도 스스로가 어떻게 고양이를 구분하는지 메커니즘을 이해할 수 없기 때문에 다양한 휴리스틱한 접근들이 있지만 한계가 있다.
2. 머신러닝 방식 : 인간처럼 사진과 해당 사진에 고양이가 있는지 여부를 보여주면서, 스스로 기계가 고양이를 판단하는 방법을 학습할 수 있도록 계속 데이터만 부어준다.
3. 어떻게 컴퓨터를 학습시킬까?
접근법은 인간의 학습법을 활용하지만, 실제로 이를 컴퓨터로 구현하는 문제가 남았다. 이를 설명하기 위해서 사람의 추론 방식에서 몇가지 인사이트를 가져와봤다.
1. 모든 인간이 동일한 케이스에 대해서 똑같은 답을 주는 것은 아니다. 구글의 캡챠같은 경우에, 어떤 사람은 맞을때가 있고 어떤 사람들은 틀리는 경우가 있다. 인간의 메커니즘은 사람마다 다르고, 같은 사람이라도 케이스에 따라 다른 것을 보면 마치 확률적으로 판단을 한다고 볼 수 있다.
-> 인간의 판단은 output으로 숫자, 확률로 나온다.
2. 인간은 뉴런이라는 세포를 통해서, 정보와 신호를 주고 받는다. 뉴런의 특징은 아래와 같고, 여기서 얻은 인사이트를 활용해서 기계 학습 모델을 설계하는데에도 활용했다.
특징 | 인사이트 | 실제 활용방식 |
인간은 여러 개의 뉴런을 엮어서 정보를 주고받는다. | 정보를 처리하는 것을 하나의 장기에서 하는 것이 아니라, 여러개의 세포들이 겹겹이 쌓여서 구조를 이룬다. | [Neural Network] 뉴런과 같은 구조를 여러 개 쌓아서 인간의 사고 방식 체계를 따라해보자. |
정보를 주고 받을 때, 뉴런 안에서는 전기적 신호를 활용하고, 뉴런간의 신경 전달은 화학적 신호로 전달한다. | 뉴런은 정보를 주고 받을 때 각각의 특성에 따라, 신호의 유형을 바꿔서 사용한다. | [Embedding] 컴퓨터가 연산하기 쉽게, 숫자 형태로 변형한다. |
뉴런이 자극을 받는다고 해서 바로 정보가 전달되는 것이 아니라, 특정 수준 이상의 자극을 받아야만 다음 뉴런으로 정보를 전달한다. | 인간 역시도 모든 정보를 다 활용하는 것이 아니라, 특정 부분의 정보만 취합할 수 있는 장치가 있다. | [Activation Function] 역치처럼 특정 수치 이상인 경우에만 활용할 수 있도록 한다. |
이를 그려보면 아래와 같다.
3. IQ 테스트에서 언어 이해, 지각 추론, 작업 기억, 처리속도와 같이 다양한 분야가 있듯이 실제 어떠한 Task를 수행함에 있어서, 복합적인 능력과 다양한 유형의 정보가 활용된다.
-> 컴퓨터도 여러 차원의 정보를 다루어야 하고, 정보를 숫자 형태로 변형해야하기 때문에 "행렬", "벡터" 처럼 다양한 차원의 숫자로 표현할 수 있다. (하나의 뉴런은 벡터, 행렬이라고 보면 된다.)
4. 인간은 직접 지식을 습득하기도 하지만 대부분의 테스크는 시험, 부모의 교육(이를 머신러닝에서는 supervision이라고 한다.)을 통해서 본인이 내린 판단이 맞고 틀린지를 학습한다.
-> 인간처럼 문제와 정답을 계속 주고 컴퓨터가 내놓은 결과값이 어느만큼 틀렸는지 알려주면서 3에서 얘기한 행렬, 벡터의 숫자들을 수정할 수 있다면 마치 인간처럼 자연스럽게 학습하는 것이라고 볼 수 있지 않을까? 위의 그림의 회색 동그라미에 있는 행렬의 숫자들을 맞추면 자연스럽게 이제 어떤 케이스가 들어오더라도 고양이인지 아닌지 판단할 수 있을 것이다.
4. 지금까지의 요약
최대한 가볍게 설명하려고 했지만, 우선 지금까지의 내용들을 정리해보면 아래와 같다.
컴퓨터가 인간처럼 Task를 잘 수행하기 위해서는 직접 일일히 알고리즘을 설계하는 것으로는 한계가 있다. 그에 따른 해결책으로 인간이 여러 사례를 통해서 학습하는 방식을 모방한 알고리즘으로 머신러닝 방법론이 나왔고, 그 중에서 인간의 뉴런 세포 구조를 모방한 "Neural Network" 알고리즘(딥러닝이라고 부름)이 오늘날 AI에서 주로 활용하는 방식이 되었다.
딥러닝의 핵심은 직접 Task를 해결할 수 있게 만들어주는 것이 아니라, 문제와 정답만 계속 보게 해주고 컴퓨터는 실제 정답과 결과가 틀렸을 경우 그 차이만 알려주어서 학습을 시키는 것이 핵심이다.
다만, 인간과 다르게 컴퓨터는 숫자 연산을 하기 때문에, 모든 과정과 학습 대상들은 숫자로 바꾸어서 계산한다. 그에 따라 수학적인 개념들이 많이 나온다. 특히 행렬을 다루기 때문에 선형대수학이 많이 사용된다.
기본 개념은 위에서 설명한 것과 같고 여러 논문에서 나온 방법론들은 그냥 기계가 잘 학습할 수 있게, 문제의 성격에 따라서 어떻게 문제와 정답을 숫자로 표시하고 어떻게 메커니즘(각 뉴런의 정보를 가중해줄지 말지를 알려주는 숫자라고 해서, 딥러닝에서는 이걸 가중치라고 부른다.)을 학습시킬지에 대해서 설명해주는 방식이라고 보면 된다.
*블로그 글에 Task라는 단어가 굉장히 많이 나오는데 Task란 우리가 해결하려는 과제를 의미한다고 보면 된다. 이 글에서는 고양이 분류를 task 중 하나라고 보면 된다.
'Machine Learning > 개념 정리' 카테고리의 다른 글
전체 인공신경망 code 구현하기 (0) | 2023.09.22 |
---|---|
딥러닝 학습 - parameter와 hyper-parameter (1) | 2023.09.18 |
back-propagation 개념 (0) | 2023.09.15 |
Forward Pass code의 수학적 이해와 code 구현하기 (0) | 2023.09.14 |
Deep Neural Network의 구성요소와 Forward pass (0) | 2023.09.13 |