💻 본업(컴공생) 이야기/머신러닝 - 딥러닝 이야기

[랩_스터디 과제 3] Gradient descent (경사하강법), how neural networks learn? 🧠

st오리🐥 2025. 1. 21. 16:13
728x90
반응형
SMALL

를 시작하기 전 ~~,,




이전 강의를 들었는데에~,,,
이후 나는 딥러닝 개요를 배웠는데,,,팀원들은 뉴럴 네트워크를 배웠다고 한닷…??!

텍스트 그 자체로, 진짜 학습안된 기계인마냥 두 개의 단어가 다르다고 완전히 다른 개념이라고 생각했던 나..

딥러닝과 뉴럴 네트워크가 무엇인지 지피티에게 물어보았다..💭




뉴럴 네트워크(Neural Network)와 딥러닝(Deep Learning)은 서로 관련이 깊지만 완전히 같은 개념은 아니다.


1. 뉴럴 네트워크 (Neural Network)는
-뉴럴 네트워크는 생물학적 뇌의 뉴런 구조를 모방한 계산 모델이고
-입력 데이터를 처리하고 결과를 출력하기 위해 노드(뉴런)와 그들 간의 연결(가중치)로 구성된 계층 구조를 가지고 있다.

2. 딥러닝 (Deep Learning)은
-뉴럴 네트워크를 기반으로 한 인공지능의 한 분야로
-뉴럴 네트워크를 깊게(계층을 많게) 쌓은 “딥 뉴럴 네트워크(Deep Neural Network)“를 활용한다.


🍪 결론
• 레이어 수가 적으면 단순한 뉴럴 네트워크(Shallow Neural Network)라고 부른다.
• 레이어 수가 깊고 많으면 딥 뉴럴 네트워크(Deep Neural Network)라고 하고, 이와 관련된 기술을 딥러닝(Deep Learning)이라고 부른다.


즉, 뉴럴 네트워크는 계층 개념이고, 딥러닝은 이 계층을 깊게 설계해서 복잡한 문제를 푸는 방법 !!!!!






각설하고 두 번째 딥러닝의 이야기를 시작한다.📣




https://youtu.be/IHZwWFHWa-w?si=jgz5vivEgDuc7-VL

 

[목표🎯]


1️⃣ Gradient descent (경사하강법) => 신경망이 어떻게 학습하는지, 머신러닝이 어떻게 작동하는지 알아보기.
2️⃣ Analyze this network => 신경망이 어떻게 작동하는지, hidden layer 의 뉴런들이 결국 무엇을 의미하는지 파고들어가보기.
 



 
이전 포스팅에 이어서,,
우리가 하고있는 작업
=
신경망에,
수많은 손글씨로 되어있는 숫자 데이터와, 그 숫자의 라벨 데이터 !! 
의 학습데이터 전체를 집어넣는 알고리즘이다. 


학습데이터는 이름처럼 모델을 학습할 수 있도록 하기 위해 쓰는 데이터이고,
테스트 데이터는 훈련받은 모델이 얼마나 잘 예측하고 분류하는지 확인하는 데이터이다.

아이에게 곱셈을 가르친다고 했을 때,
2*3=6이고, 2*4=8이고, 2*5=10 이야 ~~
라고 말해주는게 학습데이터.

그럼 2*6은 뭘까? 하고 잘 학습했는지 확인하는게 테스트데이터라고 생각하면 될 것 같다.
 

하튼…


신경망의 학습을 통해 13000여개의 가중치 및 bias가 조정되면서 모델의 성능이 개선된다.
 

앞서 예시로 말했 듯, 테스트 방식은 신경망을 훈련시킨 후
이전에 보여주지 않았던 더 많은 데이터를 보여주며 새로운 이미지를 얼마나 잘 분류하는지를 확인하는 것으로 진행한다.

-

 
신경망이 어떻게 작동하는지 실제로 알게되면, '기계가 학습한다'는 말이 이상하다는걸 알게된다.
왜냐하면 기계학습(머신러닝)은 근본적으로 ‘특정한 함수의 최솟값을 찾는 일‘이기 때문이다. 
 

지금 바로 이 문장을 이해할 필요는 없다 !




이전에 배웠던 신경망을 떠올리며 👀

각 뉴런이 이전 층의 모든 뉴런과 연결되어 있고,
각각의 활성화를 결정하는 가중합계의 가중치는 그 연결의 세기라고 생각하자.

bias는 그 뉴런이 활동적인지 또는 비활동적인지를 나타내는 지표이다. 
 
 


💥여기서💥


정말 중요한 것을 배우기 위해,  가중치와 bias를 무작위로 설정해볼 것이다.



이 상태에서 3이라는 숫자를 보여주고 출력층을 보면 엉망일것이다. (utter trash)



 
제대로 된 출력은 대부분의 뉴런이 0의 활성치를 가져야 한다. 하나의 뉴런 빼고말이다.
그래야만 밝게 활성화된 특정 뉴런을 통해 모양을 예측할 수 있기 때문이다.

그런데 엉망인 출력이 되어버렸다 !!
 
우리는 이 엉망이 되어버린 출력을 정상이 될 수 있도록 보정해주는 작업을 해야한다.
해야할 일을 조금 더 수학적으로 말하자면, 'cost함수'를 컴퓨터에서 정의해줄 것이다.

{(잘못된 출력) - (원하는 출력)}^2 을  모두 더하는 것이다.
이것이 바로 'cost'이다.


신경망이 이미지를 올바르게 분류할수록 이 합의 크기가 작다.
반대로 올바르지 못하게 분류했을 수록 수는 커진다. 
 

따라서, 우리는 수만가지의 학습에 대한 평균 cost를 검토하는 것이다. 
이 평균 cost는 신경망이 얼마나 엉망인지를 측정하는 수단이고, 컴퓨터가 스스로 뭔가 잘못됐음을 느끼게 해주는 복잡한 함수이다.



신경망 자체가 기본적으로 함수인 것을 기억해야한다.
784개의 픽셀값을 입력받고 10개의 숫자를 출력하는 함수이다.


이 함수는 가중치와 bias에 의해 매개변수화되어있다. cost 함수는 가중치와 bias를 입력받아서, 가중치와 bias가 적절한지 아닌지 하나의 숫자를 출력한다.


이 cost 함수의 출력이 최소화되도록 만들어야 정확한 아웃풋을 얻어낼 수 있다. 


1차함수나 2차함수의 최솟값은 범위가 정해져 있을 때 ,그래프를 그려서 떠올릴 수 있지만 복잡한 cost함수는 어떻게 해야할까? 

결국 함수의 최솟값을 최소화해야하는 문제가 된 것이다.


한 입력값 x 가 주어졌을 때, 어떠한 방향으로 이동해야 출력값을 낮출 수 있을지 파악해보자.

그리고 그 위치에서  함수의 기울기(미분값)을 파악해보고, 기울기가 양수이면 왼쪽으로 이동하고, 기울기가 음수이면 오른쪽으로 이동하면 된다.
(기울기 양수 -> 증가 중 / 음수 -> 감소 중)

이렇게 계속 기울기를 확인하며 적절한 방향으로 이동하다보면 함수의 local minimum에 접근할 수 있다. 


 
출발지점이 어디냐에 따라 각기 다른 최솟값으로 도착하게 되지만
이 각 극값에서의 최솟값(local minimum)이 전체 함수의 최솟값(global minimum) 이라는 보장은 없다. 
신경망에도 마찬가지이다. 
 

만약 함수의 최솟값을 찾기 위해 이동거리를 기울기에 비례해서 결정했다면,
기울기가 줄어들수록 한 번에 이동하는 거리가 점점 작아질 것이다.
이는 오버슈팅을 방지하는 것에 도움이 된다. 
 
더 나아가, 두 개의 입력값에 하나의 출력값을 갖는 함수를 생각해보자. 입력값을 x,y 평면으로 두고 cost함수는 그 평면 위에 떠있는 곡면으로 나타난다.
3차원이 될 것이다.


 
이제는 함수의 기울기 대신, 입력공간에서 어느 방향으로 움직일지를 결정해야 한다. 함수의 출력을 가장 빨리 줄일 수 있는 방향으로!

내리막 방향은 어떨까? 언덕을 굴러 내려가는 공을 떠올리면 도움이 된다.
그리고, 함수의 그래디언트가 가장 가파른 상승방향을 알려준다.


근본적으로 함숫값을 가장 빠르게 늘려줄 방향을 알려준다는 것이다.
따라서, 그래디언트의 음의방향이 가장 빠르게 함숫값을 낮추는 방향임을 할 수 있다.
게다가 그래디언트 벡터의 길이는 가장 가파를 경사가 얼마나 가파른지에 대한 지표이기도 하다. 
 
 내리막이 어떤 방향이고 얼마나 가파른지 알려주는 벡터를 컴퓨터로 계산하는 방법이 존재할까?
그래디언트만 알 수 있다면, 알고리즘이 내리막 방향과 한 번에 이동할 거리를 알아내고, 그 과정을 반복하면 함숫값을 줄일 수 있을 것이다. 
 


이것은 13000개의 입력을 가진 함수까지 확장해서 적용할 수 있는 기본적인 아이디어이다. 

신경망의 13000여개의 가중치와 bias를 거대한 열 벡터로 조직했다고 생각했을 때,

cost함수의 그래디언트의 음의방향은 그냥 벡터일 뿐이다. 
그리고 그 벡터는 어떤 방향이 cost함수를 가장 빠르게 감소시켜주는지를 알려준다.


 
우리의 특별한 cost 함수는 가중치와 bias들을 cost함수가 줄어드는 방향으로 조정할 것이고
그 뜻은 우리의 신경망이 훈련 데이터를 근거로 하여 무작위 10개의 숫자를 출력하지 않고,
우리가 원하는 정확한 결과를 출력해준다는 뜻이다. 


이 cost 함수는 모든 훈련 데이터의 평균 cost를 수반한다. 
따라서 이 cost함수를 최소화한다는 것은 모든 샘플에서 더 나은 성능을 보여준다는 것이다. 
 

———————————-

이 그래디언트를 효과적으로 만드는 알고리즘이 신경망이 얼마나 효과적으로 학습할 수 있는지를 결정하는 핵심적 요소이다.
그리고 그 알고리즘을 back propagation (오차역전파법)이라고 부른다. (이 다음 강의에서 배울 예정)
 
 
그렇다면 주어진 훈련 데이터마다 각각의 가중치와 bias들에는 정확히 어떤 일들이 일어나는 것일까?
가장 먼저, '구현 세부사항의 독립성 (Independent of Implemetation Details)' 에 대해 알아야한다. 
이 것은, 신경망 학습은 그저 cost 함수를 최소화하는 것 뿐이라는 것이다.

우리는 cost 함수가 매끄러운 출력을 갖는 것이 중요하다는 결론을 얻을 수 있다. 그래야만 우리가 한 발자국씩 내려가면서 local minimum을 구할 수 있기 때문이다. 
따라서 인공뉴런들은 단순히 활성화/비활성화 로 결정되는 것이 아니라 연속적인 활성화 값을 갖는다. 
 
이렇게 반복적으로 그래디언트의 음의 방향으로 함수의 입력값을 이동하는 방식을 '경사 하강법'이라고 한다. 
 
 
아직까지는 2개의입력일 경우만 이야기했다. 13002차원에서 굴러다니는 공을 이해하기는 어려우니깐 ...
그러나 비공간적으로 생각해볼 수 있다.. 음의 그래디언트의 각각 요소들은 2가지를 보여준다. 
 
그래디언트 부호는, 상응하는 입력벡터의 요소가 커져야할지 작아져야 할지를 알려준다. 더 중요한 것은 이 요소들의 상대적 크기이다.
크기는 어떤 요소를 조정하는 것이 더 큰 영향을 미칠지 알려주기 때문이다. 
 
이것은 방향이라는 개념을 다르게 이해하는 방법이다. 쉬운 예시로 입력변수가 2개인 함수가 특정한 점에서의 그래디언트가 (3,1)라고 계산 한 것은 그 점에서 함숫값을 가장 빠르게 증가시키는 방향 또한 알고있다는 것이다. 

 
입력 평면 위의 곡면에서는  가장 가파를 오르막이 그 방향이라는 것을 안다는 말이다.
 
'그 방향'이라는 개념을 다르게 이해하는 방법은, 첫 번째 변수를 조정하는 것이 두 번째 변수를 조정하는 것보다 3배 중요하다고 이해하는 것이다. 그렇기에 x값을 조정하는 것이 대박을 치는 것일 것이다.   (함수가 적혀있는 사진을 봐야함)
 
즉, 가중치와 bias를 어떻게 조정하는 것이 cost함수값을 가장 빠르게 줄여주는 것인가 -> 어떤 가중치를 조정하는 것이 영향이 더 큰가?
 
그렇게 하면 괜찮은 결과를 얻어낼 수 있다 !
 
 

728x90
반응형
LIST