[무료] 딥러닝 첫걸음 (홍랩 AI 시리즈)
https://www.youtube.com/watch?v=iWEi8IKs4-U&t=777s0
개요
전체 인공 지능 분야에서 머신러닝이 있고 그 중에 딥러닝이라는 분야가 있습니다. 머신러닝은 사람이 하나 하나 프로그래밍 하는 것이 아니라 머신 그러니까 컴퓨터가 배우는 것입니다. 무엇으로부터 배우는 가? 바로 데이터로부터 배웁니다. 데이터 과학이 상당부분 영역이 겹쳐 있는 것을 보실 수 있습니다.
왜 데이터로부터 배우는 방식을 사용하는가? 인류가 지금까지 시도해온 어떠한 방법 보다 데이터로 접근하는 방법이 가장 좋다라고 확인 되었기 때문입니다. 전통적인 방법으로 아무리 열심히 프로그래밍을 해도 이 머신러닝 방식을 따라 잡을 수 없더라입니다. 머신러닝 분야안에서 많은 다양한 방법들이 시도되어 왔는데요. 그 중에서도 딥러닝이 현제 대세로 자리 잡았습니다. 딥러닝 기술은 딥 뉴럴 네트워크를 사용해서 데이터로부터 배우는 것이다라고 요약을 할 수 있습니다.
예를 들어 자율주행을 한다고 하면 사람이 하나 하나 프로그래밍을 하기 보다는 운전을 하는 데이터를 왕창 주고 알아서 그 데이터를 주고 배우게 하는 것이 효과적입니다.
머신 러닝의 개념
어떠한 입력을 넣으면 함수를 통해 출력이 나옵니다. 전통적인 프로그래밍에서는 이 함수를 직접 구현해 주었습니다. 그렇지만 애매한 문제에 대해서는 직접 구현하기가 굉장히 어렵습니다. 예를 들어서 '여자 친구에게 어떠한 선물을 줘야 좋아할 까요?' 같은 것이 입력이라면 올바른 대답을 주도록 프로그래밍 하는 것은 애매하고 어려운 일이 되겠죠. 이럴 때 실제 데이터를 활용해서 함수를 만들면 더 좋은 결과를 낼 수 있는 것 같다라는 것이 기본적인 동기입니다.
가장 먼저 하는 것이 가설을 세우는 일입니다.
가장 간단한 예가 바로 직선의 방정식 같은 예시일 것입니다. 입력이 x이고 출력이 y입니다. 문제에 따라 어떠한 가설을 세울 것인가가 많이 다릅니다. 경우에 따라서는 직선의 방정식이 잘 맞는 경우가 있겠죠. 예를 들어 학교에서 특정 과목을 얼마나 공부하면 점수를 잘 받을 수 있을까요?라는 질문을 했다면 기본적으로 ‘공부를 많이 하면 점수가 잘 나와’라고 얘기 할 수 있겠죠. 이 예시에서는 x는 공부할 시간이 되고 y는 점수이고 a는 대강 비례하겠네 이고 공부를 하지 않아도 대강 b점수는 받겠네입니다. a와 b는 모르는 상태입니다. a와 b를 알기 위해서는 데이터가 필요합니다.
먼저 가설을 세우고 데이터와 학습 알고리즘을 사용하여 훈련을 시킬 수 있습니다. 학습 알고리즘에는 다양한 것이 있는데 그 중에 기본이 되는 ‘지도 학습’에서는 실제 데이터를 가설에 넣어 줬을 때 출력되는 데이터가 실제 데이터와 비슷해 지도록 훈련을 시킵니다.
이 결과로 얻어 지는 것은 바로 ‘모델’입니다. ax+b가 데이터로부터 1.2x+3.4로 얻어 졌습니다. a와 b를 구체적인 숫자로 결정 했습니다. 실제로 사용할 수 있게 훈련이 끝난 것을 모델이라고 합니다. 데이터로 부터 얻어진 것을 ‘통계적 모델' 줄여서 ‘모델’이라고 부르고있습니다. 질문을 하면 통계적 모델을 통해 ‘확률적 추측’을 합니다. 즉, ‘통계적 모델’이 알려주는 것은 확률적 추측입니다.
확률
불확실한 정도를 숫자로 표현하는 것이 확률입니다. 예를 들어 처음보는 사람에게 꽃을 주면 좋아 할까 그렇지 않을까? 딱 잘라서 좋아한다 싫어한다라고 할 수 없는 애매함이 있습니다. 컴퓨터가 이러한 것을 다루기 위해서는 불확실하면 얼마나 불확실한지 확실하면 얼마나 확실한지 숫자로 표현을 할 필요가 있습니다.
지금까지는 어떤 알고리즘이나 구현을 할 때 명확하게 떨어지는 연습을 해 왔을 것입니다. 확률이라는 도구를 이용해서 것을 활용해서 통계적으로 다룬다라는 쪽으로 개념을 확장시켜 나갈 필요가 있습니다.
· 신체 측정 데이터셋 Kaggle body measurements dataset
기술적 통계: 데이터를 설명(예: 평균, 중간값, 표준 편차, 분산 등)
추론 통계: 데이터를 일반화해서 예측/추론에 사용 (예: 회귀 등) -> 기계학습(통계적 학습) -> 딥러닝(뉴럴 네트워크 사용)
중심극한 정리
Normal distribution, Bell curve, Gaussian distribution
회귀(Regression) 분석
독립 변수들 사이의 관계를 추측하는 과정입니다.
어원: 19세기 논문에서 평균으로 돌아가는(회귀하는) 경향이 있다는 의미 Regression analysis
선형 회귀(Linear Regression)
Vega-Altair Regression Transform (ordinary least squares 사용)
키와 몸무게의 관계를 나타네는 분포입니다.
‘데이터가 살짝 올라가네’라는 패턴이 보입니다. 몸무게가 작은 경우에는 키가 작은 분포이고 몸무게가 클경우 키가 큰 분포임을 알 수 있습니다. 정확한 수치를 추측하고 싶다면 어떻게 하면 될까요? 데이터를 지나가는 직선을 방정식을 찾으면 되지 않을까라고 생각해 볼 수 있습니다.
어떤 데이터가 있을 때 경향성 혹은 패턴을 파악하기 위해서 직선을 찾는 것을 ‘선형 회귀’라고 합니다.
직선에 관계 있을것이라는 가설을 먼저 세우고 수학적인 기법을 사용해서 직선의 방정식을 구체적으로 찾아냅니다.
예를 들어 몸무게가 110일때 몸무게는 데이터 상으로는 없습니다. 이럴 때 직선의 방정식을 찾고 110일 때 몸무게를 추측할 수 있습니다.
데이터가 있을 때 패턴을 찾아내고 데이터에 없는 데이터를 추측을 해낼 수 있습니다. 이때 선형 가설을 먼저 세웠고 데이터를 통해서 통계적 모델을 만듭니다. 이 개념을 이해 했다면 통계로부터 머신 러닝으로 한 발을 내 디딘 것입니다.
- 연속적인 값을 예측하고 싶은 경우 ‘회귀 문제'라고합니다. ‘이거 아니면 저거’와 같은 분류는 어떻게 할까요? 예를 들어 고양이냐? 개냐?
- 가설이 직선형태보다 훨씬 더 복잡한 경우(또는 복잡해야 하는 경우)에 대해서 어떻게 해야 할까요?
선형 회기 더 살펴보기
다음 5개의 점을 가까운 거리로 적당히(?) 지나는 직선을 어떻게 찾을 수 있을까요?
일반 최소 제곱법(Ordinary Least Squares)
이제 우리는 a와 b를 찾아서 데이터들을 적당히 지나는 직선을 찾는 것이 목표입니다.
실제 데이터들이 (x1, y1), (x2, y2), … , (xn, yn)으로 주어져 있습니다. 구하고자 하는 것은 a와 b인데 식은 n개가 있습니다.
정확한 y1, y2, … yn은 아니지만 비슷한 값은 y1햇, y2햇, … yn햇을 구하는 식입니다.
그 다음 하는 것은 틀렸다면 얼마나 틀렸는지 오차를 계산합니다.
최소 제곱법은 오차의 제곱들의 합을 최소로 만드는 a와 b를 찾는 것입니다.
y1이 y1햇과 얼마나 다른지 y2가 y2햇과 얼마나 다른지 yn이 yn햇과 얼마나 다른지의 각 제곱들을 싹~ 더해줍니다.
식으로 나타내면 다음과 같습니다.
위 식에서 L은 로스의 줄임말입니다. 최소로 만드는 a와 b를 만드는 것이 목표입니다.
영상 함께 봅시다: https://youtu.be/iWEi8IKs4-U?t=7556
a에 대한 로스와 b에 대한 로스 곡선에서 미분했을 때 0인 지점을 찾으면 됩니다.
뉴럴 네트워크
지금까지는 간단한 형태에 대한 모델을 만드는 경우를 살펴봤습니다. 그렇다면 복잡한 경우에는 어떻게 모델을 만드느냐 인데 이럴 경우에는 뉴럴 네트워크를 사용한다라고 요약할 수 있습니다. 뉴럴 네트워크를 모델로 사용하는 방법을 알아보도록 하겠습니다.
뉴럴 네트워크 개략적으로 알아보자
뉴럴 네트워크라는 것이 정말 대단한 것을 해내고 있습니다. 도대체 어떻게 이럴 수 있는 것에 대해서는 ‘만능 근사 정리’라는 이론이 있습니다. ‘뭐든지 해낼 수 있는 함수다.'라고 간단히 정리 할 수 있습니다. 그 이유에 대해서는 두 가지로 정리 될 수 있는데요. 첫 번째가 ‘비선형성’을 가지고 있습니다. 앞에서 봤던 것은 직선 행태이고 이해하기 쉽습니다. 그런데 현실에서는 선형적인 관계가 의외로 많습니다. 비선형적인 관계도 표현 할 수 있다는 것이 특징입니다.
또 한가지는 뉴럴 네트워크는 ‘복잡하게 엮인 구조’입니다. 이 네트워크의 구조를 짠 다음 데이터를 이용해 구체적으로 뉴럴 네트워크가 내부적으로 가지고 있는 가중치들을 결정을 하게됩니다. 예를 들어 앞에서 y=ax+b라는 가설을 세우고 a와 b의 값들을 계산 했었죠. 이러한 가중치를 계산 하듯이 뉴럴 네트워크 내부의 가중치들을 결정하게 됩니다.
가중치를 결정하기 위해서 데이터를 사용하게 되는데 데이터로부터 훈련을 받습니다. '뉴럴 네트워크가 데이터를 통해서 학습을 한다'입니다. 우리 입장에서는 훈련을 시킨다라고 표현 할 수 있습니다.
가중치 값으로 한 번에 어떠한 값을 사용해야 한다는 것이 아니라 점진적으로 업데이트 해 나가는 수치 최적화 방법을 사용합니다.
비선형의 필요성
자동차의 출력과 연비의 관계에서 비선형이 필요합니다.
분류의 문제도 비선형이 필요합니다. 공부의 양과 합격/불합격의 관계입니다. 선형으로는 표현을 할 수 없습니다. 이럴 경우 많이 사용하는 것이 시그모이드 함수(우측 초록색 그래프)입니다. 이 시그모이드 함수는 오른쪽으로 무한히 가도 1보다 크지 않고 왼쪽으로 무한이 가도 0밑으로 가지않습니다.
비선형 함수 적용
선형 함수와 비선형 함수를 함께 사용합니다. 입력이 선형함수를 거치고 이 결과를 다시 비선형함수를 거쳐서 결과적으로 비선형 출력을 합니다.
인공 뉴런
예전에는 인간의 두뇌를 본따서 만들었다는 신비주의가 있었으나 요즘에는 그냥 아주 복잡한 비선형 함수를 만드는 방식 정도로 이해하면 되겠습니다.
z: 왼쪽은 직선의 방정식이고, σ: 오른쪽은 비선형 함수
합쳐져서 결과적으로 비선형 함수로 동작한다로 요약을 할 수 있습니다.
조금 더 구체적으로 봅시다.
왼쪽부분을 전달 함수라고 하고 단순히 전달만 해준다라고 볼 수 있습니다. 직선의 방정식을 거쳐간다고 볼 수 있습니다. 오른쪽의 비선형 함수는 활성화 함수라고 부릅니다. 이 활성화 함수를 어떤것을 써야 한다고 정해져 있는 것이 아니라 상황에 따라 사용하게 됩니다.
인공 뉴런의 입력으로 여러 개가 될 수 있습니다. 입력이 n개라고 하면 가중치 n개와 b(바이어스)라고 하는 것이 하나 더 있습니다.
뉴럴 네트워크
이런 인공 뉴런들 여러개가 네트워크로 연결되어 있기 때문에 뉴럴 네트워크라고 합니다. 이 뉴럴 네트워크는 입력도 여러개일 수 있고 출력도 여러개 일 수 있습니다. 뉴런들이 일부만 연결 되어 있을 수도 있고 모두 연결되어 있을 수도 있습니다. 뉴럴 네트워크 연결 형태는 응용 분야에 따라 달라집니다.
뉴럴 네트워크 훈련 과정
경사 하강법
뉴럴 네트워크를 훈련시킬때 사용하는 경사 하강법을 알아봅시다.
앞에서 비슷한 것을 봐서 조금은 익숙해 졌을 것입니다.
손실 함수 정의 : MSE(Mean Squared Error)는 오차의 제곱들의 평균
앞에서는 오차의 제곱들의 합을 사용했는데 여기서는 평균을 사용합니다.
그 식은 다음과 같고 평균이므로 n으로 나누어 줬고 나머지는 앞에서와 비슷합니다.
여기서 L(w,b)가 점점 줄어들 수 있도록 w와 b를 반복적으로 업데이트 합니다.
로스(L)를 w에대해서 미분을 하는데 이 값이 양수이면 L이 증가한다는 얘기입니다.
우리가 원하는 것은 손실 함수의 값을 줄이는 것입니다. 그래서 현재의 w값을 L을 w로 미분한 값으로 빼줍니다. 이 때 미분값 앞에 알파(α)라는 상수가 붙습니다. 이 알파는 학습을 얼마나 빠르게 할지 느리게 할지를 결정하는 상수입니다. 알파 값이 작으면 학습이 오래 걸리고 크면 학습이 불안정해 질 수 있습니다.
b도 비슷한 방식으로 진행합니다.
경사 하강법 시연 영상 : https://youtu.be/iWEi8IKs4-U?t=9946
경사 하강법 확인 사이트
- Gradient Descent Animation
- 3차원으로 가시화함, θ0가 w θ1이 b 높이가 로스입니다.
실제 구현 시
xi입력에 웨이트(w)를 곱하고 바이어스(b)를 더해서 예상값 yi햇을 얻습니다.
손실 함수 L을 정의합니다. 오류의 제곱을 더하고 평균을 냅니다.
전개된 로스식 하나 하나 전개하려면 힘들고 연산도 의외로 오래 걸립니다.
함수가 여러 단계로 있을 때… 즉, 함수 안에 함수가 있고 또 함수가 있을때 이런 구조일 때는 매번 전개를 해서 미분을 하는 것은 현실 적이지 않습니다. yi과 yi햇을 가지고 손실을 구하는구나만 이해하고 넘어 갑니다. 대신에 체인 룰을 이용합니다.
우리가 원하는 것은 로스L를 줄이는 방향으로 w와 b를 업데이트하는 것입니다. w증가 할 때 얼마나 빠르게 L이 증가 혹은 감소를 하는지, b가 증가할 때 얼마나 빠르게 L이 증가 혹은 감소하는지에 대한 그레디언트 이 기울기가 필요합니다.
체인룰을 적용하여 L에 대해서 yi햇으로 미분을 합니다. 그리고 yi햇에 대해서 w로 미분을 합니다. 이 각각을 미분해서 곱하면 됩니다. 전체를 전개해서 미분할 필요가 없고 간단하게 분리된 두 미분을 각각 미분하여 곱합니다.
Propagation
순전파(Forward Propagation)
일단 먼저 입력을 집어 넣고 무엇이 나오는지를 보는 것을 순전파라고 합니다.
역전파(Backward Propagation)
로스를 계산하고 가중치들을 업데이트하기 위한 그레디언트들을 계산을 해야 하는데요. 이때 반대방향으로 가기 때문에 역전파라고합니다.
참고
'AI' 카테고리의 다른 글
SpecKit, 스펙 기반 개발 툴킷 (0) | 2025.09.11 |
---|---|
AI 그리고 뉴럴 네트워크(AI and Neural Network) (3) | 2025.08.27 |