brunch

AI란 무엇인가?

가장 쉽게 설명한 AI의 구조

by AI개발자
@gaebalsite (21).jpg

AI(인공지능)은 인간이 보기에 이 컴퓨터(기계)가 지능이 있다고 생각되는 행동을 하도록 컴퓨터를 조작하는 것입니다. 인공지능(Artificial Intelligence, AI)라는 단어는 존 매키시(John McCarthy, 1927-2011) 컴퓨터 과학자가 1950년대에 만들어낸 용어입니다.


첫 시작으로 AI(인공지능)이 무엇인지 명확히 하고, 독자가 지난 몇년 동안 한번쯤은 들어봤을 머신러닝(Machine Learning, ML), 딥러닝(Deep Learning, DL)이라는 2가지 용어와 AI의 관계를 설명하려고 합니다. 우선 머신러닝의 실제 사례부터 살펴봅시다. 이번에는 AI에 대한 개요를 설명합니다.


컴퓨터는 프로그램이라는 일련의 지시, 명령을 내리면 정해진 일을 하도록 만들어져 있습니다. 컴퓨터를 작동시키기 위한 레시피를 알고리즘이라고 하는데, 그 알고리즘을 구체화한 것이 바로 프로그램입니다.


알고리즘이라는 단어는 최근 자주 들었을 것으로 예상되는데 9세기 페르시아 수학자 무함마드 이븐 무사 알 하와리즈미(Muhammad ibn Moussa al-Hwarizmi)에서 유래된 것으로 새로운 단어는 아닙니다. 알-후와리즈미가 세상에 준 가장 큰 선물은 우리가 '대수학'이라고 부르는 수학분야입니다.


여기서 잠깐 비유를 들어보겠습니다. 미나가 고추장 회사를 만들어서 성공적으로 운영하고 있습니다. 고추장의 레시피는 미나가 생각해 낸 것이고, 그녀는 그 레시피를 소중히 간직하고 있습니다. 미나만이 만드는 방법을 알고 있는 이른바 비법소스입니다. 미나는 고추장 제조 공정의 각 단계마다 한명의 작업자를 고용하고 있습니다. 물론 그 작업자는 사람입니다.


미나는 고추장 레시피를 도둑맞으면 큰일이라고 생각하며, 약간은 과격하게 마치 기계처럼 취급했습니다. 사실 작업자들은 꽤 넉넉한 임금을 받고 있기 때문에 그런 것에 크게 신경쓰지 않고, 뒤에서 미나를 바보로 취급했습니다.


미나의 레시피는 알고리즘입니다. 고추장을 만들기 위해 따라야 하는 일련의 단계를 보여줍니다. 미나가 고추장을 만들기 위해 작업자에게 주는 지시를 모아놓은 것이 프로그램입니다. 프로그램은 작업자들이 절차대로 지시를 따르면 알고리즘이 구체화되도록 되어 있습니다. 미나가 고추장을 만들기 위한 알고리즘을 구체화하기 위해 작업자들을 프로그래밍 한 것입니다. 일련의 순서는 아래와 같습니다.

@gaebalsite (21)1.jpg

이 시나리오에는 몇 가지 주의해야할 점이 있습니다. 첫번째, 인간을 기계처럼 취급하는 미나가 정말 못된 인간이라는 점입니다. 둘째, 고추장 제조 공정 중 작업자가 왜 그 작업을 해야 하는지 이해하는 부분이 전혀 없다는 것입니다. 셋째, 컴퓨터(작업자)는 왜 그 작업을 하는지 몰라도 개발자(미나)는 하나하나 작업의 이유를 알고 있다는 것입니다.


앞에서 설명한 내용은 우리가 컴퓨터를 어떻게 다루고 있는지를 잘 보여줍니다. 이는 1930년대 앨런 튜링이 처음 구상한 컴퓨터, 더 거슬러 올라가면 19세기 찰스 바베지가 만든 분석기관을 포함한 거의 모든 컴퓨터에 해당합니다. 인간은 알고리즘을 구상하고, 그 알고리즘을 일련의 단계(프로그램)로 번역합니다. 컴퓨터는 프로그램을 실행하고, 실행을 통해 알고리즘을 구체화합니다. 기계는 자신이 무엇을 하고 있는지 이해하지 못합니다. 단순히 일련의 명령어를 실행하고 있을 뿐입니다. 프로그램을 통해 임의의 알고리즘을 실행할 수 있는 범용 컴퓨터를 구현할 수 있다는 생각으로 만든 것은 바베지나 튜링과 같은 천재들이었지만, 세계 최초의 개발자로서 자주 거론되는 것은 바베지의 친구인 아이다 러브헤이븐스(Ada Lovelace)입니다. 우리가 지금 컴퓨터라고 부르는 것의 무한한 가능성을 최초로 이해한 사람은 바로 러브헤이븐스라고 할 수 있습니다.


이제 AI(인공지능), 머신러닝(ML), 딥러닝(DL)의 관계를 좀 살펴봅시다. 한편으로는 이 3가지가 현대 AI로 취급되고 있습니다. 틀린 말이기는 하지만, 그렇게 하는 것이 편리합니다. 하지만 이 3가지 용어는 아래 그림과 같이 올바른 관계를 구성하고 있습니다.

@gaebalsite (21)2.jpg

딥러닝은 머신러닝의 하위 분야이고, 머신러닝은 인공지능의 하위분야입니다. 따라서 인공지능 안에는 머신러닝도 아니고 딥러닝도 아닌 부분이 포함되어 있습니다. 그런 부분을 "옛날의 AI"라고 부릅니다. 여기에는 1950년대 이후 개발된 알고리즘과 접근법이 포함됩니다. 옛날의 AI는 지금 사람들이 AI를 이야기할 때 생각하는 것과는 다릅니다. 필자가 계속 설명하다보면 독자들은 AI세계의 이 부분을 완전히 무시하게 될 것입니다.


머신러닝은 데이터로부터 모델을 구축합니다. 우리에게 모델은 추상적인 개념으로 입력을 받아들여 어떤 연관성이 있는 출력을 생성하는 것을 의미합니다. 머신러닝의 목표는 알려진 데이터를 사용해 모델을 조정하고 알 수 없는 데이터가 주어졌을 때에도 모델이 의미있는 출력을 낼 수 있도록 하는 것입니다. 약간 두리뭉실한 설명이지만 좀더 시간이 지나면 필자가 계속해서 설명하는 내용을 읽다보면 이해가 될 것입니다.


딥러닝은 이전에는 너무 커서 쓸모없었던 거대한 모델을 사용합니다. 이 역시도 이해하기 어렵지만 딥러닝은 여러 레이어의 신경망을 겹겹이 쌓아올린 것이라는 것 외에는 엄밀한 정의는 없으며 나중에 설명하는 내용을 참고하면 좋을 것 같습니다. 이 강좌에서는 딥러닝은 대규모 신경망, 머신러닝은 데이터에 의해 조정된 모델, 인공지능은 머신러닝, 딥러닝을 포함한 넓은 의미의 단어로서 이 강좌에서 다루지 않는 것까지 포함합니다.


AI에서는 데이터가 전부입니다. 이 점은 아무리 강조해도 지나치지 않습니다. 모델은 맨땅에 해당하는 경우지만, 모델을 작업에 적합하게 만들기 위해서는 데이터로 표면을 다듬어야 합니다. 데이터가 좋지 않으면 모델도 좋지 않습니다. 또한 이 강좌에서는 좋은 데이터와 나쁜 데이터라는 개념이 자주 나옵니다.


일단 지금은 모델이란 무엇이며 조정을 위해 어떻게 도움이 되는지, 그리고 조정 후, 어떻게 사용할 것인지에 집중합니다. 지금까지 설명한 조정을 해서 사용한다는 내용은 완전히 헛소리는 아니겠지만 무엇인가 찜찜한 느낌이 들 수 있지만, 절대 그렇지 않습니다. 모델에게 직접 물어보는 방법도 있지만 그 부분은 필자가 보증합니다.


머신러닝 모델은 일반적으로 숫자집합형태의 입력을 받아 출력을 생성하는 블랙박스입니다. 출력은 개인지 고양이인지 같은 라벨이나 개일 확률, 모델이 나타내는 특징(넓이, 방갯수, 우편번호 등)을 가지는 집의 가격과 같은 연속적인 값입니다.


모델에는 파라미터가 있으며 파라미터는 모델의 출력에 영향을 미칩니다. 모델의 파라미터를 조정하는 것을 트레이닝이라고 하는데 주어진 입력으로부터 올바른 출력을 반환할 수 있도록 모델의 파라미터를 설정하는 것입니다.


프레이닝을 위해서는 입력의 수집과 입력이 주어졌을 때 모델이 생성해야 할 출력이 필요합니다. 처음 들었을 떄, 이것은 무엇인가 말도 안되는 내용처럼 들릴 수 있습니다. 이미 알고 있는 출력을 모델에게 알려줘야 하는 이유는 무엇일까요? 그것은 미래의 어느 시점에는 아웃풋이 무엇인지 알 수 없는 인풋이 주어질 수 있기 때문입니다. 모델의 존재 의미는 여기에 있습니다. 알 수 없는 인풋을 주면 신뢰할 수 있는 아웃풋을 돌려줄 수 있도록 하는 것입니다.


훈련은 알려진 입력과 출력의 집합을 이용해 판단 오류를 최소화할 수 있도록 모델의 파라미터를 조정하는 것입니다. 그렇게 할 수 있다면, 새로운 미지의 입력이 주어졌을 때 모델의 출력을 신뢰할 수 있게 됩니다.


모델 훈련은 개발자와는 근본적으로 다릅니다. 프로그래밍은 알고리즘을 구현하기 위해 컴퓨터에게 단계별로 지시하는 것입니다. 프레이닝은 모델이 데이터 학습을 통해 올바른 출력을 생성할 수 있도록 파라미터를 조정할 수 있도록 하는 것입니다. 트레이닝에는 프로그래밍의 요소가 없지만, 이는 대부분 우리가 알고리즘이 어떻게 되어야 하는지 알지 못하기 때문입니다. 우리는 입력과 원하는 출력 사이에 어떤 관계가 있다는 것을 알거나 관계가 있어야 한다는 믿음뿐입니다. 그리고 모델이 그 관계를 유용하게 사용할 수 있을 정도로 충분히 잘 추정해 주기를 기대하는 것입니다.


영국 통계학자 조지 박스(George Box)의 "모든 모델은 다 틀렸지만, 유용한 모델도 있다"라는 격언을 기억합시다. 다시 박스가 생각했던 것은 다른 유형의 수학적 모델을 의미했지만, 이 격언은 머신러닝에도 적용될 수 있습니다. 이제 이 분야가 왜 머신러닝이라고 불리는지 이해가 되셨을 것입니다. 우리는 모델(컴퓨터)에게 데이터를 주고 학습을 시키는 것입니다. 우리가 컴퓨터를 프로그래밍하는 것이 아닙니다. 학습을 시키는 것입니다. 따라서 머신러닝의 알고리즘은 아래와 같습니다.


① 모델에 입출력과 모델이 입력에서 생성하기를 원하는 출력을 모은 훈련용 데이터세트를 수집함

② 훈련할 모델 유형을 선택함

③ 모델에 훈련용 입력을 제공하고, 출력이 잘못되었을 때 모델의 매개변수를 조정하여 모델을 훈련시킴.

④ 모델성능에 만족할 때까지 3단계를 반복함

⑤ 훈련된 모델에 새로운 미지의 입력을 주어 출력을 생성하도록 함


대부분의 머신러닝은 이 알고리즘을 따릅니다. 알려진 라벨이 붙은 데이터를 사용하여 모델을 훈련하기 때문에 이 접근 방식을 교습학습이라고 합니다. 올바른 출력을 생성하도록 학습하는 동안 모델을 지시하고 감독하는 것입니다. 다시 말해, 모델이 정답을 맞출 수 있을 때까지 벌을 주는 것입니다. 결국 이것은 좀 사악한 시도입니다.


이제 구체적인 사례를 살펴볼 준비가 되었지만, 그 전에 지금까지의 이야기를 간단하게 정리해 보겠습니다. 우리는 알 수 없는 입력에 대해서도 제대로 된 출력을 반환할 수 있는 시스템을 원합니다. 이런 시스템을 만들기 위해 우리는 입력과 그에 대응하는 알려진 출력을 수집하여 머신러닝 모델을 훈련시킵니다. 훈련하는 동안 모델은 훈련 데이터에 대한 오류를 최소화하도록 파라미터를 재작성하고 직접 조정합니다. 모델의 성능이 만족스러온 수준에 도달하면 미지의 입력을 주어 모델을 사용합니다. 이는 모델이 올바른 출력을 반환할 것이라고 생각하기 때문입니다.


이 강좌의 첫번째 예시는 아이리스(붓꽃) 꽃의 각 부분의 측정값을 모은 유명한 데이터세트를 사용하는 것입니다. 이 데이터세트는 1930년대부터 알려진 것으로 현재 머신러닝이라고 불리는 것에 대해 사람들이 얼마나 오랫동안 고민해왔는지를 알 수 있는 예시입니다.


목표는 측정값 컬렉션을 입력으로 주면 아이리스 꽃의 품종을 출력으로 출력하는 모델을 만드는 것입니다. 전체 데이터세트에는 3종류의 아이리스에 대한 3종류의 측정값이 포함되어 있지만, 이야기를 단순하기 위해 2종류 품종과 2종류의 측정값만 사용하기로 합니다. '세토사'와 '버시컬러'의 꽃잎길이와 두꼐(단위 cm)입니다. 따라서 우리의 모델은 2가지 측정값을 입력으로 받ㅇ아 '세토사'와 '버시컬러'로 해석할 수 있는 값을 출력으로 반환합니다. 이처럼 출력이 2가지 값 중 하나를 결정하는 2분류 분류모델(이항 분류모델)은 AI에서 매우 많이 사용됩니다. 반면에 3개 이상의 범주 중 하나를 선택하는 모델을 다항식 분류 모델이라고 합니다.


우리의 데이터세트에는 100개의 샘플이 포함되어 있습니다. 즉, 100개의 측정값 쌍과 그에 대응하는 품종유형의 데이터가 100개가 잇다는 뜻입니다. '세토사'를 클래스0, '버시컬러'를 클래스1이라고 합니다. 클래스 라벨은 입력의 분류(카테고리)를 나타냅니다. 모델은 클래스 레이블로 숫자를 자주 사용하지만 이는 모델이 입력과 츨력의 의미를 모른다는 것을 의미합니다. 모델은 입출력의 연관성을 밝혀줄 뿐입니다. '생각'이라는 단어의 일반적인 의미로 볼 때, 모델은 생각하지 않습니다.


여기서 모델에 대한 것은 잠시 중단하고 중요한 용어를 소개합니다. 독자가 읽고 싶지 않은 이야기일 수 있지만 이 내용은 나중에 모든 내용에서 꼭필요한 것입니다.


인공지능에서는 벡터와 행렬을 많이 사용합니다. 벡터는 숫자를 나열한 것으로 하나의 데이털 취급합니다.예를 들어, 아이리스 꽃의 4가지 측정값을 입력을 ㅗ사용한다는 것은 (4.5, 2.3, 1.3, 0.3)과 같은 4개의 숫자 연쇄로 하나으 ㅣ꽃을 표현하는 것입니다. 이 벡터가 나타내는 꽃은 꽃잎 길이가 4.5cm, 두께 2.3cm, 꽃잎길이 1.3, 꽃잎두께 0.3cm라는 것을 의미합니다. 이 측정값들을 하나의 그룹으로 묶으면 하나의 데이터로 취급할 수 있게 됩니다. 벡터의 요소수를 차원이라고 합니다. 예를 들어 아이리스 데이터세트는 꽃의 4종류의 측정값에서 얻은 4차원 벡터를 사용하며 AI는 종종 수백, 수천개의 차원을 가진 입력값을 처리합니다. 입력이 이미지인 경우, 해당 이미지의 모든 픽셀이 1차원이 되고, 28픽셀 사각형의 이미지라면 입력 벡터는 28 x 8, 즉, 784차원이 됩니다. 하지만 3차원이든 33000차원이든 개념적으로는 동일하며 하나의 데이터로 취급되는 하나의 숫자 연속이라는 점은 변함이 없습니다. 하지만 이미지에는 가로세로가 있어 숫자의 연속이 아닌 2차원의 숫자 연속이 될 수 있습니다. 2차원 숫자의 연속이 바로 행렬입니다. 머신러닝에서는 데이터세트를 행렬로 표한흐는 경우가 많스빈다. 행은 개별 홍채꽃과 같은 데이터세트 요소를 나타내는 벡터이고 열은 측정값을 나타내는 벡터요소입니다. 예를 들어, 아이리스 데이터세트의 처음 5개의 꽃은 아래와 같은 행렬로 표현이 가능합니다.

각 행은 하나의 꽃을 나타냅니다. 첫번째 줄은 앞의 벡터 예제와 일치하며, 두번째 줄부터 다른 꽃의 측정값을 나타냅니다.


이 강좌를 읽게 되면 아래 사항은 항상 염두해두고 읽기 바랍니다.


벡터는 데이터세트의 측정값을 나타내는 숫자의 연속입니다.

행렬은 2차원 연속으로 데이터세트 자체(벡터)를 나타내는 경우가 많습니다.


AI를 계속 공부하다보면 벡터와 행렬의 차이가 중요한 의미를 가지게 됩니다. 그럼 본론으로 들어가 봅시다.




모델의 입력은 모델의 특징입니다. 아이리스 데이터세트에서는 꽃잎의 길이와 두께의 2가지 특징이 있으며, 이를 특징 벡터(또는 샘플)로 묶어 하나의 특징 벡터가 모델의 입력이 되고, 2등급 분류 모델의 출력은 종종 모델에서 볼 때 입력이 클래스1이 될 확률을 나타내느 숫자가 됩니다. 입력이 클래스1일 확률이 얼마나 되는지를 나타내는 수치가 됩니다. 이 예시에서는 2개의 특징으로 구성된 하나의 특징 벡터를 입력으로 주면, 입력이 '버시컬러'중 하나라는 전제가 있기 때문에 '버시컬러' 종이라고 말할 수 없다면 입력은 '세토사'종이라는 뜻입니다.


모델 테스트는 머신러닝의 에티켓이 되었습니다. 테스트없이 어떻게 모델이 제대ㅑ로 작동한다고 말할 수 있을까요? 훈련 데이터에서 모든 질문에 정답을 맞히면 제대로 작동하고 있다고 생각할 수 있지만, 경험이 따르면 반드시 그렇지 않다는 것이 밝혀졌습니다. 모델을 올바르게 테스트하는 방법은 라벨이 붙은 훈련 데이터의 일부를 훈련 후, 테스트를 위해 남겨두는 것입니다. 이렇게 훈련에 사용하지 않은 데이터에 대해 모델이 어느 정도 성능을 발휘하는지가 모델의 학습 정도를 더 잘 보여줍니다. 따라서 라벨이 붙은 샘플 중 80개는 훈련용, 20개는 테스트용이라고 가정해 봅시다. 이때 훈련 세트와 테스트 세트에 2가지 클래스 (아이리스품종)가 거의 같은 비율로 포함되도록 하는 것이 중요합니다. 이 또한 가능한 지켜야 할 실천적 철칙입니다. 특정 클래스의 예시를 보여지지 않고 어떻게 다른 클래스와 구별하는 방법을 학습할 수 있을까요?


모델의 성능을 판단하기 위해 별도의 테스트세트를 사용하는 것은 단순한 에티켓이 아닙니다. 머신러닝의 중요한 문제인 일반화(generalization)를 해결하기 위한 방법입니다. 일부 머신러닝 모델은 최적화라는 널리 사용되는 접근방식과 유사한 프로세스를 따릅니다. 과학자와 기술자는 최적화를 통해 측정된 데이터를 알려진 함수에 맞게 조정합니다. 머신러닝 모델도 최적화를 통해 파라미터를 조정하지만, 목표는 다릅니다. 직선과 같은 함수에 데이터를 맞추는 것은 최상의 적합도, 즉, 측정된 데이터를 가장 잘 설명하는 직선을 찾는 것입니다. 하지만 머신러닝은 훈련 데이터의 일반적인 특징을 학습해 새로운 데이터에도 일반화할 수 있는 모델을 만드는 것을 목표로 합니다. 별도로 분리해둔 테스트세트를 통해 모델을 평가하는 이유도 여기에 있습니다. 테스트세트에는 모델의 파라미터 변경을 위해 사용하지 않는 모델에게는 알려지지 않은 새로운 데이터가 포함되어 있습니다. 테스트세트에 대한 모델의 성능은 모델의 일반화 능력에 대한 단서가 됩니다.


이번 예시에서는 2개의 입력특징이 있기 때문에 특징 벡터가 2차원이므로 2차원이므로 훈련데이터세트를 그래프로 표현할 수 있습니다. 하지만, 대부분의 특징 벡터는 수백, 수천개의 특징 벡터를 가지고 있습니다.


아래 그림은 홍채의 2차원 훈련데이터를 그래프로 나타내는 것으로 x축 꽃잎길이, y축 꽃잎 두께를 나타냅니다. 원은 '세토사', 사각형 '버시컬러'의 측정값에 해당합니다. 즉, 각각의 원과 사각형은 개별훈련 샘플, 한꽃의 꽃잎 길이와 두께를 나타냅니다. 이 그래프를 그리려면 개별 꽃의 꽃잎 길이와 같은 x축 점을 오른손으로 누르고 꽃잎 두께와 같은 y축의 점을 왼손으로 누른 후 오른손을 위로 왼손을 오른쪽으로 움직여 두 손가락이 부딪히는 지점이 그 꽃을 나타내는 점이므로 그곳에 세토사 원, 버시컬러 사각형을 표시합니다.

@gaebalsite (21)4.jpg

위 그래프는 훈련세트의 특징공간을 보여줍니다. 이 예시에서는 2개의 특징만 있기 때문에 훈련 세트를 이렇게 직접 시각화할 수 있습니다. 그렇지 않다고 해서 포기할 필요는 없습니다. 더 높은 차원의 공간에서 샘플 분포를 2,3차원 공간의 점으로 표현하는 그래프를 그릴 수 있는 고급 알고리즘이 개발되어 있습니다. 이 공간이라는 단어는 우리가 일상적으로 사용하는 공간과 같은 의미입니다.


두 클래스가 어지럽게 섞어 있는 것 같나요 아니면 깔끔하게 분리되어 잇는 것 같나요? 원은 모두 그래프 왼쪽 하단에 모여 있고, 사각형은 모두 오른쪽 상단에 보여 있으며 두 클래스 사이에 겹치는 부분은 없습니다. 이 두 클래스가 특징 공간에서 완전히 분리되어 있다는 것을 의미합니다.


이 사실ㅇ늘 이용하여 아이리스를 품종별로 분류하는 분류기를 만드는데 어떻게 활용할 수 있을까요? 분류를 위해 사용할 수 있는 모델 유형은 여러가지가 있는데 그 중 결정 트리가 있습니다. 의사결정 트리는 특징에 따라 "예"와 "아니오"로 나뉘는 질문을 생성하고 이를 통해 주어진 입력에 대한 클래스 라벨을 판단하여 출력으로 삼습니다. 질문을 그림으로 표현하면 위아래가 뒤집힌 트리모양입니다. 의사결정트리는 컴퓨터가 생성하는 20문항 게임과 같다고 생각할 수 있습니다.


우리가 가지고 있는 특징량은 꽃잎의 길이와 두께 2가지인데 "꽃잎 길이가 2.5cm보다 짧습니까?"라는 한가지 질문만으로 새로운 붓꽃을 분류할 수 있습니다. 대답이 "예"라면 클래스0인 '세토사'를, '아니오'라면 클래스1인 '버시컬러'를 반환하면 됩니다. 이 간단한 질문에 대한 답변만 잇으면 훈련 데이터를 올바르게 분류할 수 있습니다.


지금 필자가 말한 요점을 이해하셨는지요? 저는 이 질문으로 모든 훈련 데이터를 올바르게 분류할 수 있다고 말했습니다. 그렇다면 훈련에 사용하지 않은 20개의 테스트데이터는 어떨까요? 모든 테스트 데이터에 올바른 라벨을 부여하기 위해 단 하나의 질문만 하는 분류기가 충분하다고 할 수 있을까요? 사실 우리가 알고 싶은 것은 바로 이 부분이며, 이것이 바로 분류기의 성능에 대해 이야기할 부분입니다.


아래 그림은 앞서 설명한 훈련 데이터와 더불어 질문1개로 분류기를 만들 때 사용하지 않은 테스트 데이터를 나타낸 것입니다. 검은색으로 채워진 원과 사각형은 테스트 데이터를 나타냅니다.

@gaebalsite (21)5.jpg

테스트 데이터 중 우리의 규칙을 위반하는 것은 없습니다. 곷잎길이 2.5cm 미만인지 물어보면 올바른 클래스라벨을 얻을 수 있습니다. 우리 모델은 완벽하고 실수는 0입니다 독자는 자신의 첫번째 머신러닝 모델을 완성했습니다. 다시 '세토사'가 아닌 다른 아이리스품종인 '버지니카'를 가지고 지금과 같은 작업을 해봅시다. 아래 그래프와 같이 나옵니다. 삼각형이 버지니카 품종을 나타냅니다.

@gaebalsite (21)7.jpg

두 클래스가 명확하게 구분되는 것이 아니라 서로 겹치는 부분이 있기 때문에 간단하지 않습니다. 이 새로운 아이리스 데이터세트로 의사결정트리를 훈련시켜 봅시다. 앞에서 마찬가지로 80개 샘플을 훈련에 사용하고 20개 샘플을 테스트에 남겨둡니다. 이번에 만든 모델은 완벽하지 않습니다. 20개 샘플 중 18개 샘플에 올바른 라벨이 부여되었습니다. 정답률은 10개에 대해 9개, 90%입니다. 대략적으로 이 모델로 아이리스 꽃을 분류하면 90% 확률로 정확한 결과를 얻을 수 있지만, 엄밀히 말하면 모델 성능에 대해서는 좀더 신중한 판단이 필요합니다. 중요한 것은 머신러닝 모델이 항상 완벽할 수 없다는 것입니다. 머신러닝 모델은 오류를 범할 수 있다는 것입니다.


아래 그림은 학습된 결정트리를 부여줍니다. 맨 위가 루트이며, 거기서부터 시작하여 박스 안의 질문에 답합니다. 대답이 '예'라면 오니쪽 하단 박스로 '아니오'라면 오른쪽 하단의 박스로 이동합니다. 리프에 도달할 때까지 질문에 답하며 왼쪽 아래 또는 오른쪽 아래로 이동합니다. 입력한 내용은 리프 라벨이 주어집니다.

@gaebalsite (21)8.jpg

첫번째 의사결정트리 분류기는 단순하여 한가지 질문에 대한 답변만으로 소속클래스를 판단할 수 있었지만, 두번째 의사결정트리 분류기같은 것이 더 일반적입니다. 대부분의 머신러닝 모델은 그렇게 단순하지 않습니다. 머신러닝 모델이 어떤 처리를 하는지는 이해할 수 있지만, 왜 그렇게 동작하는지는 쉽게 알 수 없습니다.

의사결정트리는 직접 작동이유를 알려주는 유형의 모델로 모델로는 드문 유형입니다. 어떤 입력이든 위 그림의 루트에서 리프까지 따라가다보면 왜 그 라벨이 붙었는지 자세히 알 수 있습니다. 반면에 현대의 AI를 뒷받침하는 신경망 내부는 그렇게 쉽게 알 수 없습니다.




모델을 실제 운영시 높은 성능을 내기 위해서는 모델 훈련용 데이터가 실제 모델에 주어지는 입력 유형을 모두 포함해야 합니다. 에를 들어, 개와 앵무새 이미지를 구분하는 모델을 만들고 싶다면 훈련세트에는 개와 앵무새 이미지만 잇다고 가정해 봅시다. 마찬가지로 개와 앵무새 이미지로만 구성된 테스트세트에서 모델이 높은 성능을 보였다고 하더라도, 정식으로 모델을 구동할 때 늑대 이미지를 입력하면 어떻게 될까요? 직관적으로 생각해보면, 아직 늑대가 무엇인지 모르는 어린아이처럼 모델은 '개 사진이다'라고 응답할 것입니다. 대부분의 머신러닝 모델들이 그렇게 응답하는 것입니다.


이를 명확히 하기 위해 간단한 실험을 해봅시다. 모든 AI연구자들이 사용하는 유명한 데이트세트 중 하나는 0부터 9까지의 수작업으로 작성된 수만개의 숫자이미지로 구성된 데이터세트가 있습니다. 이 데이터세트는 MNIST(Modified NIST)라는 이름을 가지고 있는데 이것은 미국 국립표준기술연구소(NIST, National Institude of Standards and Technology)가 1990년대 말 미국 상무부 산하 연구소로 상공업분야의 거의 모든 것에 대한 표준을 정히는 것을 합니다.


아래 그림은 MNIST의 전형적인 이미지를 보여줍니다. 여기서 우리는 목표는 0, 1, 3, 9를 나타내는 숫자를 구분하는 방법을 학습한 신경망을 만드는 것입니다. 누구나 사용할 수 있는 scikit-learn과 같은 오픈소스 툴킷이 있기 때문에 신경망 구조를 몰라도 신경망을 훈련시킬 수 있습니다. 이는 AI의 대중화라는 측면에서는 의미가 있지만, 잘 모른다는 것은 가끔 위험할 수 있는 것을 의미합니다. 모ㅓ델이라는 것은 실제로는 결험이 있는 것처럼 보일 수 있습니다. 모델의 작동원리를 이해핮 ㅣ못하면 모델 결험을 발견하기 전에 이미 늦어버립니다.

@gaebalsite (21)9.jpg

분류기를 훈련시킨 후, AI가 훈련중에 보지 못한 4와 8의 이미지를 입력하는 반칙을 시도해 봅시다. 모델은 이런 입력을 어떻게 처리할까요? 필자가 숫자인식모델을 훈련하기 위해 사용한 것은 오픈소스 툴킷입니다. 우선 데이터세트의 경우, 입력 특징 벡터가 하나의 벡터로 분해된 숫자 이미지라는 점만 기억해 둡시다. 픽셀의 첫번째 행의 데이터뒤에 두번째 행, 그 뒤에 세번째 행이 이어져 전체 에미지가 하나으 ㅣ긴 벡터, 숫자열이 됩니다. 숫자이미지는 28x28픽셀이므로 틱징 벡터는 784개 숫자로 구성됩니다.


신경망에 아이리스처럼 단순한 2차원 공간이 아닌 784차원 공간의 데이터에 대해 학습을 시키게 되지만, 머신러닝은 이런 난제에도 잘 대처할 수 있습니다. 신경망을 조정하기 위해 사용한 훈련 세트에는 24,745개의 샘플이 포함되어 있었기 때문에 0, 1, 3, 9의 개별 숫자에 대해 각각 약 6,000개 샘플이 있었다는 것을 의미합니다. 이정도면 모델이 다를 수 있는 숫자 이미지를 거의 다 커버할 수 있을 것 같지만, AI는 대부분 경험과학이기 때문에 실제로는 실험해봐야 알 수 있습니다.


따로 준비한 테스트세트에도 0, 1, 3, 9의 이미지가 포함되어 있으면 샘플수는 4,134개 에 달합니다. 모델평가는 혼동행렬이라고 불리는 2차원 숫자표를 사용합니다. 혼동행렬은 모델이 테스트데이터에 대해 어떻게 동작하는지 보여주기 때문에 가장 널리 사용되는 모델평가방법 중 하나입니다.


숫자 이미지 분류기의 혼동 행렬은 아래와 같습니다.

@gaebalsite (21)10.jpg

혼동행렬의 각행은 샘플의 실제 라벨이고 각 열은 모델이 판단하는 숫자입니다. 각요소는 입력의 클래스와 모델이 판단한 라벨 조합의 갯수를 나타냅니다. 예를 들어, 첫번쨰 행은 테스트세트에 포함된 0개의 이미지에 대한 분류결과를 보여주는데, 980개의 입력 중 모델이 0이라는 라벨을 반환한 입력은 978개이고, 3이라는 라벨을 반환한 입력과 9라는 라벨을 반환한 입력이 각각 1개씩 있습니다. 따라서 입력이 0일때 모델의 출력은 980개 중 978개가 정답이었다는 것을 알 수 있습니다.


마찬가지로 입력이 1일 때 모델은 1,128번, 3일때는 997번, 9일때는 995번 올바른 라벨을 반환합니다. 분류기의 성능이 높으면 혼동 행렬의 왼쪽 상단에서 오른쪽 하단으로 향하는 대각선상의 수치가 높이지며, 그 외의 위치의 수치는 0에 가까워집니다. 대각선에서 벗어난 숫자는 모델이 범한 오류를 나타냅니다.


전체적으로 이 수치모델의 정답률은 99%입니다. 우수한 성능의 우수한 모델을 손에 넣었습니다. 물론 이는 모델에 대한 입력이 정말로 0, 1, 3, 9인 경우에만 해당됩니다. 만약, 다른 입력이 있다면 어떻게 될까요?


이 모델에게 982개의 4이미지를 입력해 봅시다. 모델의 응답은 아래와 같습니다.

@gaebalsite (21)11.jpg

즉 모델은 982개의 4이미지 중 917개에 대해 9라는 라벨을 반환했고, 48개에 대해서는 0, 나머지는 1 또는 3을 반환했습니다.

@gaebalsite (21)12.jpg

이 모델은 7도 9라고 부르고 싶지만, 3이라고 부르는 경우도 꽤 많습니다. 신경망은 동작을 설명하려고 해도 비밀스러운 판단기준을 잘 보여주지 않는데 이 경우 3으로 분루딘 227개의 7중 47개는 가운데에 가로막대가 추가된 유럽식 7이었습니다. 전체 데이터세트에서 227개의 이미지를 무작위로 추출한 결과, 유럽식 7은 24개밖에 포함되지 않습니다. 이 비교는 수학적으로 엄밀한 비교는 아니지만, 유럽식7은 모델을 속일 정도로 3에 가까운 경우가 많은 것으로 보입니다. 이 모델은 4나 8을 인식할 수 있도록 훈련되지 않았기 떄문에 차선책으로 가장 가깝게 보이는 것으로 분류하는 것입니다. 사람들도 글씨를 쓰는 방식에 따라 4나 7을 9로 착각할 수 있습니다. 모델도 인간과 비슷한 실수를 한다는 것은 흥미로운 사실입니다. 하지만 더 중요한 것은 이 모델이 주어질 수 있는 모든 인풋을 가지고 훈련되지 않은 잘못된 모델이라는 것입니다. 모델에게 '모르겠습니다'라는 말을 할 수 있는 방법이 없습니다. 모델에게 확실한 형태로 그렇게 말하는 것은 어려울 것입니다. 이것은 단순한 실험이지만 깊은 의미가 있습니다. 숫자 이미지를 분류하는 것이 아니라 의료영상에서 암을 찾는 모델인데 중요한 유형의 손상을 인식할 수 있도록 훈련되지 않았거나 손상의 모든 형태를 인식할 수 있도록 훈련되지 않았다면 어떤 일이 벌어질까요? 데이터세트가 적절하고 포괄적인지 여부가 환자의 생사를 가를 수도있습니다.




숫자 이미지의 예시는 보간법(interpolation)과 외삽법(extrapolation)의 관점에서 볼 수도 있습니다. 보간법은 알려진 데이터범위내에서 근사치를 구하는 반면, 외삽법은 알려진 데이터 범위 밖에서 근사치를 구하는 것입니다.


숫자이미지의 예로 일상에서 흔히 볼 수 있는 비스듬히 기울어진 0은 훈련세트에 뚜렷하게 기울어진 0이 없는 경우 보간법의 예라고 할 수 있습니다. 모델이 이러한 이미지에 대해 올바르게 응답하기 위해서는 보간법이 필요합니다. 반면, 훈련데이터에 포함되지 않은 가로막대를 관통하는 0분류는 외삽법과 유사합니다. 좀더 쉬운 예로 1950년부터 2020년까지의 세계인구를 모델링하는 경우를 생각해 봅시다.


우선 1950년부터 1970년까지의 데이터를 가장 가까운 직선으로 표현해 봅시다. 직선 끼워맞추기는 곡선 끼워맞추기의 일종으로 머신러닝의 사촌격이라고 할 수 있습니다. 직선 끼워맞추기를 위해서는 기울기와 절편이라는 2가지 수치를 찾아야 합니다. 기울기는 직선이 얼마나 가파른지를 나타냅니다. 기울기가 양수인 경우 그래프의 x축을 왼쪽에서 오른쪽으로 갈수록 출력(y좌표)의 값이 커집니다. 기울기가 음수인 경우, 입력이 커질수록 출력은 작아집니다. 절편은 직선이 y축과 겹치는 부분입니다. 즉, 입력이 0일 때의 출력값이라는 뜻입니다.


직선맞추기에는 데이터를 가장 잘나타내는 기울기와 절편을 찾는 알고리즘을 사용합니다. 아래 그림은 이렇게 얻은 직선과 각 연도의 실제인구(+기호)를 그린 그래프입니다. 그려진 직선은 대부분의 +기호의 위치 또는 그 근처를 지나고 있어 충분히 잘 맞았다고 할 수 있습니다. 인구단위는 10억명입니다.

@gaebalsite (21)13.jpg

이런 직선을 얻으려면 기울기와 절편을 사용하여 각 연도의 인구를 추정할 수 있는데 1950년부터 1970년까지의 인구추정은 이 직선을 만드는데 사용한 데이터범위내에 있기 때문에 보간법입니다. 그러나 1950년 이전, 1970년 이후 인구를 추정하는 것은 외삽법입니다. 아래 표는 보간법의 결과를 보여줍니다.

@gaebalsite (21)14.jpg

보간법을 통해 얻은 인구수치는 실제인구에 상당히 근접한 수치로 모델이 상당히 잘 만들어졌다는 것을 의미합니다. 이제 외삽법을 통해 추정한 범위를 벗어난 연구인구를 구해봅시다.

@gaebalsite (21)15.jpg

외삽법을 통해 얻은 인구와 실제 인구의 차이는 해가 갈수록 커지고 있습니다. 1950년부터 2020년까지 그래프를 그려보면 문제가 무엇인지 알 수 있습니다.

@gaebalsite (21)16.jpg

해가 지날수록 핏라인의 오차가 커지는데 이는 인구데이터가 애초에 선형적이지 않기 때문입니다. 즉, 인구 증가율은 일정하지 않고, 직선으로 그릴 수 없다는 뜻입니다. 외삽법을 할 때, 데이터가 그 직선에 계속 적합하다고 생각해야 할 이유가 있을 수 있습니다. 그 이유가 정당하다면 직선은 잘 맞을 것입니다. 하지만, 현실 세계에서는 보통 그런 보장이 없습니다. 따라서 보간법은 좋지만 외삽법은 안된다는 것을 모토로 삼아야 합니다.


어떤 데이터에 대한 직선 끼워맞추기는 곡선 끼워맞추기의 한 예시입니다. 손으로 쓴 숫자 인식모델은 입력이 훈련데이터에 가까울수록 높은 성능을 보입니다. 테스트데이터에 포함된 숫자는 모두 0, 1, 3, 9이므로 테스트데이터는 훈련 데이터와 유사하며 두 데이터 세트는 동일한 분포에서 만들어졌기 때문에 사용된 데이터 생성 프로세스가 동일합니다. 따라서 테스트 세트의 분류에서 모델은 보간법을 수행했다고 할 수 있습니다. 하지만, 이 모델에게 4와 7의 이미지를 무리학 ㅔ인식하게 했을 때 훈련 중에 본적이 없는 데이터에 대해 모델이 판단하게 ㄷ한 것이므로 외삽법을 했다고 할 수 있습니다.


보간법은 좋지만 외삽법은 안된다는 말을 반복해서 강조해야 합니다. 좋지 않은 데이터세트에서는 좋지 않은 모델만 만들 수 있습니다. 좋은 데이터세트는 좋은 모델을 만들어내지만, 그런 모델도 외삽법을 강요하면 잘 작동하지 않습니다. 그리고 아무리 좋은 모델이라도 '모든 모델은 다 틀렸지만, 유용한 모델도 잇다'는 말에서 벗어날 수 없습니다.




1907년 힐레아 벨록이 쓴 '어린이를 위한 교훈시집'을 본받아, AI엔지니어가 모델을 훈련하고 테스트하고 무엇보다도 배포할 때 주의해야 할 점을 정리해 봅시다. 2016년 한 컨퍼리스에서 신경망이 왜 그런 판단을 내리는지 이해하기 위한 연구에 대한 강연을 들으러 갔었을 때 아직 미해결 문제인 '왜 신경망이 그런 판단을 내리는지'에 대한 강연을 들었습니다. 아직 해결되지 않은 문제이지만 그때보다 연구가 많이 진전된 상태입니다. 이 강연에서는 입력이미지의 어떤 부분이 모델의 판단에 영향을 미치는지에 초점을 맞췄습니다.


강연자는 허스키 개와 늑대 이미지를 보여주며 자신의 분류기가 어떻게 둘을 구분했는지 이야기했습니다. 그는 이 모델이 테스트세트에서도 높은 성능을 보였고, 청중의 모신러닝 연구자들에게 이것이 좋은 모델인지 물었습니다. 많은 사람들이 '예'라고 대답했지만, 뭔가 함정이 있을지도 모른다는 망설임이 느껴졌습니다. 그 느낌은 옳았습니다. 강연자는 신경망이 판단을 내릴 때 이미지의 어떤 부분에 주목했는지를 보여주었습니다. 모델이 주목한 것은 개도 늑대도 아니었습니다. 모델은 훈련세트의 늑대 이미지에는 항상 눈이 배경에 있는 반면, 개이이미지에는 눈이 없다는 것을 발견한 것입니다. 모델은 개와 늑대에 대해서는 전혀 학습하지 않고 눈이 있는 것과 없는 것만 학습한 것입니다. 만약 이 사실을 모르고 모델의 행동을 그대로 받아들였지만 모델을 그대로 가동했다가 큰 실수를 저질렀을 것이고 1950-1960년대 초장치 머신러닝 시스템에서도 비슷한 이야기가 전해지고 있습니다. 이 이야기는 지어낸 이야기같지만, 도시전설의 기원과 같은 그 시대의 논문을 읽은 적이 있습니다. 이 경우 이미지는 숲의 조감도였습니다. 일부 이미지에는 탱크가 있는 반면 다른 이미징레는 탱크가 없었습니다. 모델은 탱크를 감지하도록 훈련되었고, 훈련데이터에서는 높은 성능을 보여줬으나, 실전에 적용했을 떄 성능이 형편없었습니다. 훈련세트 이미지에는 맑은 날에 활영한 이미지와 흐린 날에 촬영한 이미지가 있었다는 것을 알게 되었습니다. 개발자가 의도한 것에 대해 모델이 전혀 학습하지 못한 것입니다.


최근 훨씬 고도화된 머신러닝 모델에서도 이런 현상이 일어나고 있습니다. 훈련데이터에 대부분의 사람들이 간과하는 아주 사소한 상관관계를 학습했을 뿐인데 전문가들조차도 모델이 언어의 기본적 특성을 학습했다고 착각하는 경우도 있습니다.


상관관계라는 단어에는 수학적으로 엄밀한 의미가 있지만, 이 문제의 본질은 '상관관계는 인과관계가 아니다'라는 말로 표현할 수 있습니다. 상관관계란 두 사물 사이에 한쪽이 발생하면 다른 쪽도 발생한다는 연관성이 있다는 것을 말합니다. 좀더 구체적으로 말하면, 상관관계는 어떤 것의 변화와 다른 것의 변화사이에 얼마나 강한 연관성이 있는지를 측정한 것입니다. 둘다 증가하면 양의 상관관계입니다. 한쪽이 증가하면 다른 쪽이 감소하면 음의 상관관계입니다.


예를 들어, 수탉이 울면 해가 뜨는 2가지 사건은 시간적으로 앞뒤가 있습니다. 먼저 수탁이 욹고 그 다음 해가 뜬다. 이런 상관관계가 있다고 해서 수탁 울음소리가 원인이 되어 해가 뜨는 것은 아니기 때문에 인간관계는 아니지만 이런 상관ㄱ돤계가 자주 관찰되면 비로 증거라고 할만한 것이 없어도 인간은 한쪽이 원인이 되어 다른 한쪽이 일어났다고 생각하게 됩니다. 인간의 두뇌가 그렇게 행동하는 이유는 어렵지 않게 알 수 있습니다. 이런 연관성이 생존에 도움이 될 수 있다면 진화는 이런 연관성을 가진 인간을 선택합니다.


상관관계는 인과관계가 아니다라는 말은 AI에도 적용됩니다. 지금까지 살펴본 모델들은 훈련데이터에서 원하는 대상(개, 늑대, 탱크)과 상관관계가 있는 것은 찾아내는 것을 학습했지만, 대상 자체에 대해서는 아무것도 배우지 못했습니다. 영리한 머신러닝 엔지니어는 이런 가짜 상관관계를 항상 주시하고 있습니다. 훈련세트와 테스트 세트로 대규모의 다양한 데이터세트를 사용하는 것은 이런 가짜 상관관계를 방지하기 위한 것이지만, 실제로는 항상 그렇게 할 수 있는 것은 아닙니다.


우리는 모델이 배워야 할 것을 정말 배우고 있는지 끊임없이 질문해야 합니다. 그리고 MNIST의 수치 이미지에서 배운 것처럼 모델이 실제 운영시 보게되는 모든 유형의 입력을 모델에게 보여줘야 합니다. 외삽법이 아닌 보간법으로 하도록 해야 합니다.


구글은 2015년에 구글포토에 특정기능을 추가할 때 구글포토의 모델이 인간의 얼굴에 대한 훈련이 충분하지 않아 부적절하고 잘못된 연관성을 가지고 있었다는 알게 되었습니다. 일반적 의미에서든 사회적 의미에서든 편견은 AI에게 있어서 큰 문제입니다. MNIST의 숫자이미지로 또 다른 실험을 해봅시다. 이번 모델은 입력이 9인지 9가 아닌지 판단하는 단순해 보이는 단순한 판단을 내립니다. 앞서 사용한 것과 동일한 신경망으로 4, 7, 9가 아닌 다른 숫자 이미지가 포함된 데이터세트로 9인지 아닌지를 훈련ㅅ기키면 다음 혼동행렬에서 볼 수 있듯이 99% 정답률을 달성합니다.

@gaebalsite (21)17.jpg

혼동행렬은 9,777개의 테스트이미지 중 9,754개의 이미지에 9가 아닌 다른 레이블을 올바르게 부여했으며, 1,400개의 9이미지 중 1,362개의 이미지에 9라는 라벨을 올바르게 부여했음을 보여줍니다. 모델은 테스트세트에서도 높은 성능을 보이지만, 테스트세트에는 4와 7의 이미지가 포함되어 있지 않습니다. 이 경우 모델이 부여하는 클래스는 9와 9외의 2가지밖에 없으므로 혼동행렬이 작아집니다. 혼동 행렬의 오른쪽 상단의 24은 입력이 9가 아닌데도 모델이 9라고 응답한 횟수가 23번임을 나타내며 2클래스분류 모델에서 클래스1은 일반적으로 관심을 갖는 클래스, 즉, 양성 클래스입니다. 이 23개 입력은 9가 아닌데로 모델이 9라고 했기 때문에 위양성이라고 할 수 있습니다. 마찬가지로 왼쪽 하단의 38개 샘플은 실제로는 9인데 모델이 9가 아니라고 말했기 때문에 위음성입니다. 위양성이나 위음성이 없는 모델이 바람작하지만 둘중 하나를 줄이는것이 중요한 경우도 있습니다.


예를 들어, 유방촬영술로 유방암을 검출하는 모델의 경우, 위양성은 실제로는 암이 아닌데도 모델이 암일지도 모른다라고 말하는 것입니다. 그런 말을 들으면 소름이 끼치지만 더 많은 검사를 하면 모델이 틀렸다는 것을 알 수 있습니다. 하지만 위음성은 암을 간과했다는 뜻입니다. 이 경우, 위양성은 위음성보다 더 심각한 오류는 아니기 때문에 위음성이 거의 없다면 위양성이 많은 모델도 허용될 수 있습니다. 이는 머신러닝 모델을 훈련하고 테스트하고 이해도를 높이고 모델 유형의 차이점을 학습하는 과정에서 중요해집니다.




다시 구체적인 예시를 들어봅시다. 이 '9인지 아니지'분류기는 앞서 만든 MNIST모델과 마찬가지로 4와 7에 대한 지식어 전혀 없습니다. 앞서 만든 MNIST모델은 4와 7을 보여주면 높은 비율로 9라고 답했습니다. 이 모델도 그럴까요? 모델에게 4와 7의 이미지를 주었더니 아래와 같은 결과가 나왔습니다.

@gaebalsite (21)18.jpg

모델들은 14,117개의 4와 7 이미지중 9,103개를 9라고 답했습니다. 이는 65%가 조금 넘는 비율로 대략 2/3에 해당합니다. 이는 모델이 감지하도록 훈련되지 않은 유형의 입력을 입력했을 때와 비슷한 양상을 보입니다. 이제 훈련세트에 4와 7의 이미지도 추가하여 모델을 훈련시켜 봅시다. '9와 비슷하지만 다른' 예시를 보여주면 모델의 성능이 향상되지 않을까? 훈련데이터 3%를 4와 7의 이미지로 구성해 보았습니다. 전체 모델의 정답률은 이전과 동일한 99%였지만, 훈련할 때 보여주지 않았던 4와 7을 보여주였을 때의 결과는 아래와 같습니다.

@gaebalsite (21)19.jpg

개선되고 있습니다. 이전에는 4와 7의 2/3이 9라고 답했지만 9라고 답한 비율은 1/4로 줄었습니다. 훈련세트에 포함된 4와 7의 이미지 비율을 18%로 늘리자 모델이 4와 76에 대해 범하는 분류오류는 1%미만으로 감소했습니다. 모델은 데이터를 통해 학습하기 때문에 모델이 외삽법이 아닌 비간법을 할 수 있도록 가능한 완전한 데이터세트를 사용해야 합니다.


AI를 단순히 사용하는 것뿐만 아니라 이해하고자 한다면, AI모델 훈련에 사용되는 데이터 품질에 대해 설명한 내용을 중요하게 받아들여야 합니다. 2021년 마이클 로버츠(Michael Roberts)등이 Nature Machine Intelligence지에 발표한 '흉부 엑스레이, CT스캔 이미지에서 코로나19의 예후, 감염을 감지하기 위한 머신러닝 모델을 사용할 때 흔히 볼 수 있는 맹점과 권장사항'은 이를 생각하게 하는 놀라운 사례입니다. 흉부엑스레이와 CT스캔 이미지에서 코로나19 감염을 감지하기 위해 만들어진 머신러닝 모델의 성능을 평가하고 처음 2000개 연구모델 중 62개 연구모델을 엄격하게 검사할 수 있는 대상으로 선별했습니다. 그리고 최종적으로 데이터세트의 제작방식과 편향성측면에서 결함이 있어 실제 의료현장에서 사용할 수 있는 것은 하나도 없다는 결론을 내렸습니다.


이 때문에 모델에게 자신에 대한 설명 능력을 부여하는 것을 목표로 하는 설명가능한 AI와 같은 하위분야가 생겨나고 있습니다. 데이터를 보고 모델이 무엇을 왜하는지를 인간이 이해할 수 있을 정도로 이해하도록 노력하는 것입니다.




학습에서도 일단 대상주제에 뛰어들어 개요를 알고 나서 나중에 다시 와서 깊이 공부하면 이해가 더 잘되는 경우도 많습니다. 체계적으로 파고들기 전에 막연한 느낌을 그려놓고 체계적으로 들어갑시다.


많은 새로운 용ㅇ어와 개념이 나왔는데 독자가 당장 그 용어들을 모두 이해하거나 기억해줄거라고 기대하지 않습니다. 다만, 씨앗을 뿌려두면 다음에 해당 용어와 개념을 접하게 되면 '그것이 이거였구나'라며 생각할 가능성이 높아질 것입니다. 반복해서 보면 중요한 것을 확실하게 배우게 됩니다.


이번 글에서는 AI란 무엇이고, AI에 필수적인 부품은 무엇인지를 정리한 것입니다. 그리고 AI가 우리에게 주는 것은 무엇이며 우리는 어떻게 대처해야 되는지를 정리했습니다.


AI에는 모델이라는 것이 있는데 이번에는 의사결정트리와 신경망 2가지를 소개했지만 사실 의사결정트리에 대해 더 이상 알필요는 없습니다. 그리고 모델은 함수와 같다고 생각하는 것이 이해하기 쉽습니다. 어떤 것(입력)을 넣으면 어떤 것(출력)이 나오는 블랙박스라는 것으로 생각하면 되는데 AI에서 입력은 특징벡터, 즉 문제해결에 적합한 데이터를 모아놓은 것입니다.


그리고 AI가 무엇을 제공하는지, 그리고 우리가 어떻게 대처해야 하는지에 대한 것입니다. AI는 강력하지만, 우리와 같은 방식으로 사물을 생각하지는 않습니다. AI의 성패를 결정하는 것은 데이터이며 우리가 제공하는 데이터 그 이상도 그 이하도 아닙니다. 데이터세트에 편향이 있으면 AI도 편향됩니다. 데이터세트에 실제 운영에서 반드시 나타나는 유형의 입력을 넣지 않으면 AI는 그런 입력을 제대로 처리할 수 없습니다.


AI는 주어진 데이터 그 이상일 수 없기 때문에 우리는 공정하고 편견없는 데이터세트를 만들어 선입견없이 AI가 실제로 무엇을 학습했는지 이해해야 합니다. AI는 1950년대에 처음 등장했는데 왜 이제야 갑자기 여거지서 AI를 볼 수 있게 된 것일까요? 이에 대한 답은 다음 강좌에서 알려드리겠습니다.


© 2024 ZeR0, Hand-crafted & made with Damon JW Kim.

Profile: https://gaebal.site

AI/LLM개발 및 강의/컨설팅 문의: https://naver.me/GalVgGKH


keyword
매거진의 이전글기업 내재화가 가속화되면 SI업체는 설 자리가 없을까?