딥러닝 - ANN

JungWooLee·2022년 10월 2일
0

딥러닝

목록 보기
1/2
post-thumbnail

신경망

인공 신경망의 기본 구성요소

노란색으로 표시된 부분은 모두 독립적인 변수이다

예를 들어 DB 에서 결과값으로 나온 행 하나가 Input Value 하나를 차지한다 이해하면 된다

이러한 varirables 들은 표준화가 선행되어야 한다

시냅스에서는 가중치를 할당받게 되는데 이 가중치는 인공 신경망이 기능하는데 필수적인 역할을 한다 (가중치로 신경망이 학습하기 때문)

신호들이 뉴런에 들어가면 첫단계로 입력된 모든 값들이 합산됨, 그리고 활성화 함수를 적용, 적용된 값으로 다른 뉴런에게 신호를 전달


활성화 함수

활성화 함수의 타입

1. 한계값 함수

X 축에는 입력값의 가중 합계, Y 축에는 0부터 1 까지의 값


값이 0보다 작으면 한계값 함수는 0을 전달, 값이 0보다 크거나 같다으면 1을 전달

2. 시그모이드 함수

머신러닝에서 로지스틱 회귀에서 사용되는 함수, 한계값 함수와 달리 곡선을 이루고 있어 매끄럽고 점진적으로 진행됨 0 아래면 없다 보고, 0이상이면 1에 가까워진다

이러한 시그모이드 함수는 마지막 층인 출력층에 매우 유용 ( 확률 예측에 유용 )

3. 정류화 함수

정류화 함수는 인공 신경망에서 가장 유명한 함수중 하나. 0까지 가서 0이 되면 거기서부터 입력값이 증가하면서 서서히 진행됨

4. 하이퍼볼릭탄젠트 함수

시그모이드 함수와 매우 유사, 하지만 시그모이드와는 달리 0 아래로 -1 까지 내려감, 값은 0에서 1까지 대략 1/ 반대쪽에서 0에서 -1 까지


신경망은 어떻게 동작하는가?

부동산 감정평가 모델

신경망에서 중요한 부분중 하는 학습이지만 이경우 애플리케이션에 집중하기 위해 학습이 완료된 뉴런이라고 가정하고 진행

가령 아래와 같은 히든 뉴런들을 가진 모델이 있다 가정

각각의 뉴런들은 고유한 성질을 지니며 가치를 판단하는 기준 또한 다르다
가령 가장 상단의 뉴런의 경우 도시와 가까우면서 면적이 큰 집을 가치있다고 여기는 뉴런이 될것이다. 하나의 뉴런이었다면 정확한 가치 판단을 하기 어렵겠지만 이러한 유니크한 가치 책정 기준을 가진 뉴런들이 모여 신경망을 이루게 되고 결국 최종적으로 원하는 값에 근사한 결과값을 도출 해낼 수 있게 된다.

위 예시처럼 Input Variable 이 있더라도 가중치가 0에 가까운 속성이 있을 것이며 또는 어떠한 뉴런에서는 해당 속성의 가중치가 0을 초과하는 경우도 존재할 것이다


신경망을 학습시키는 법

1. 하드 코딩

프로그램에 구체적으로 규칙을 정해주고 원하는 결과를 알려줌.
프로그램이 처리해야 할 가능성이 있는 모든 옵션들을 미리 설정

2. 신경망

프로그램이 스스로 무슨일을 하고 있는지 이해할 수 있는 기반을 만들어 입력 정보를 제공하고 뭐가 출력되는지를 알려주어 나머지는 스스로 학습하도록 하는 것

[퍼셉트론]


가령 학습시키는 하나의 퍼셉트론이 한행을 기준으로 학습을 거친다 하였을 때

Y^ : 가중치와 알고리즘을 통한 예측값, Y : 실제값

매번 가중치를 변경해가며 예측값이 실제값과 최대한 근사하게 될 때까지 진행된다

처음 input variable 을 통하여 뉴런을 거쳐 예측값을 실제값과 비교하고 (비용함수를 통하여) 돌아가서 가중치를 업데이트 하게 된다 (이를 역전파라고 한다)

이는 하나의 행이 아니라 백개든 만개든 똑같이 해당된다. 역전파를 통하여 가중치를 조정하여 예측값과 실제값의 오차가 최소가 되도록 학습시키는 과정을 거치게 된다


경사하강법

구체적으로 어떻게 가중치가 조정될까?

비용함수 값을 최소화 하기 위해 어떻게 할 수 있을까?

1. Brute-force 무차별하게 대량의 가중치를 가져와 비교를 진행, 가장 근사한 값을 찾는다

가령 천개의 가중치가 있다 하였을 때, 비용함수 값의 그래프는 아래와 같다

당연하게도 C 가 최소가 되는 구간이 가장 좋은 가중치가 될것이다

🤔 왜 모두 브루트포스로 최적의 가중치를 찾지 않을까?

가중치의 수를 늘리고 네트워크 내의 시냅스 수를 늘리면서 차원의 저주 (Curse of Dimensionality) 를 맞닥뜨리게 되기 때문

차원의 저주란?

위 예시에서 학습이 덜된 상태라 하였을 때 가중치는 25(4*5 + 5)개 존재한다
이때 브루트 포스를 적용한다면?

모든 가중치가 테스트할 조합이 1000개씩 있다면 전체 조합의 수는 10의 75제곱만큼 조합이 나온다

세상에서 가장 빠른 슈퍼 컴퓨터는 93.01PFlop/s (93*10^15 초당 부동소수점 연산) 의 속도로 처리가 가능한데 이는 10^75 / 93*10^15 = 3.42 * 10^50 년이 걸리게 된다

즉, 🤢 현실적으로 불가능

그렇기에 등장한 것이 경사하강법이다

2. 경사하강법

만약 빨간점부터 시작한다 하였을 때에 그 지점에서 비용함수의 각도를 확인한다 (차별화)
즉, 특정 지점의 기울기가 얼마인지 알아내어 기울기가 우상향인지 우하향인지 확인

  • 우하향 한다면 내리막을 뜻함
  • 오른쪽은 내리막, 왼쪽은 오르막
  • 내리막이라면 오른쪽으로 가야하며 오르막이라면 왼쪽으로 가야한다
    이를 반복적으로 수행하여 비용함수를 최소화활 상황까지 계산한다

확률적 경사하강법

브루트 포스에 비해 경사하강법이 현실적으로 시도해볼 만한 비용함수를 최소화할 방법인 것은 이해한다
하지만 비용함수가 볼록해야지만 사용할 수 있다는 단점이 있다

만약 비용함수 그래프가 불규칙적이라면 가령 아래 그림과 같다면?

먼저 다음 그림과 같은 상황이 나타나는 이유에 대해 알아볼 필요가 있다

만약 비용함수가 예측값과 실제값 사이에 차이가 제곱이 아닌 비용함수를 선택하거나 제곱차이인 비용 함수를 선택하였으나 다차원 공간이라서 모양이 불규칙적으로 바뀔 수 있다

만약 해당 비용함수 그래프에서 기존의 경사하강법을 적용한다면 빨간공의 위치를 최소값으로 인식할 것이다. 실제 최소값은 Best 에 있지만 말이다

🤣 맞는 가중치를 찾지 못하였기에 수준이하의 신경망을 가지게 되는 결과로 이어짐

이러한 문제를 해결하기 위해 확률적 경사하강법을 사용한다
확률적 경사하강법은 비용함수가 볼록할 필요가 없다!

경사하강법과 확률적 경사하강법의 차이

경사하강법은 모든 행을 신경망에 연결하고 행이 입력되면 오른쪽 비용함수 공식에 따라 계산하게 된다. 그리고 이 가중함수를 통해 가중치를 조정하게 된다. 이를 배치 경사 하강법 (경사하강법) 이라고 한다

→ 샘플에서 배치 전체를 가져와 적용하고 실행

확률적 경사하강법은 이와는 좀 다른데 하나의 행을 가져와 신경망을 실행하고 가중치를 조정한다. 그런다음 다음 행으로 넘어가게 되고 똑같이 해당 행을 가져와 신경망을 실행, 가중치를 조정한다

즉, 전체행을 가져와 실행하는 것이 아닌, 매 해마다 가중치를 조정하는 것이다.

가장 큰 차이점은 확률 경사 하강법은 전반적인 최소치를 찾는게 아니라 해당 구간의 (로컬) 최소치를 찾게되는 문제를 피할 수 있다는 점이다.

👍 이는 확률적 경사 하강법 (SGD)변동성이 훨씬 높으며 한번에 반복 한번, 행 한번을 실행하기 때문에 변동성이 훨씬 높다. 그렇기에 로컬 최소값이 아닌 글로벌 최소값을 찾을 확률이 더 높아진다

또한 SGD배치 경사 하강법에 비해 더 빠르다는 점이다, 전체 데이터를 메모리에 로드해서 모든 행이 다 실행될 때까지 기다리는 배치에 비해 기다릴 필요가 없이 하나씩 처리하기 때문! 그렇기에 알고리즘이 훨씬 가볍고 빠르다

정리하자면 배치 경사 하강법의 경우 신경망의 시작 가중치가 똑같다면, 똑 같은 반복을 하고 같은 결과로 가중치가 업데이트 되는 반면 SGD 는 같은 결과가 나오지 않는다. 확률적인 방법이기 때문. (무작위로 가능한 행을 선택하여 신경망을 확률적으로 업데이트) 그렇기에 매번 SGD 로 실행하게 되면 시작 가중치가 똑같더라도 다른 과정, 다른 반복을 거쳐서 비용함수를 매기기 때문에 똑 같은 가중치를 보장받진 못한다

이외에도 배치와 확률적 경사 하강법을 합친 미니 배치 경사 하강법이 존재하는데, 이는 임의로 설정한 만큼 행 배치를 실행하고 한번에 설정한 수만큼 행을 실행하여 가중치를 업데이트하는 방법이다


역전파

순전파는? 정보가 입력층에 입력되면 앞으로 전파되어 y^ 출력값이 나오며 그걸 훈련 세트에 있는 실제값과 비교하여 오차를 계산

역전파는? 계산된 오차가 신경망을 통해 반대쪽으로 역전파되어 가중치를 조정하고 신경망을 훈련하훈 되는 것

※ 역전파 과정 동안 알고리즘의 구조 방식 덕분에 모든 가중치를 동시에 조정할 수 있다. 그렇기에 정확하게 어떤 오차가 신경망의 어느 가중치에 의해 나타나는지 파악 할 수 있다

역전파모든 가중치를 동시에 조절한다는 점이 키 포인트!


신경망 훈련의 절차

  1. 가중치들을 무작위로 0과 비슷하지만 0은 아닌 작은 수로 설정
  2. 첫번째 행에 대한 데이터 세트의 첫 관측치를 입력층에 입력 (하나당 하나의 입력 노드)
    • 열을 가져와 입력 노드에 넣는 행위
  3. 순전파 , 뉴런은 각 뉴런의 활성화의 영향이 가중치에 의해 제한되는 방식으로 활성화됨. 가중치가 각 뉴런 활성화의 중요성을 결정. 그리고 예측한 결과, 결과값 y^ 이 나올때까지 전파됨
  4. 예상 결과를 실제 결과와 비교 (생성된 오차를 측정)
  5. 역전파 , 오차가 역으로 전파되면서 오차에 얼마나 책임이 있느냐에 따라서 가중치를 업데이트. 학습률은 가중치를 얼마나 업데이트 하느냐에 따라 결정됨
  6. 1~5단계를 반복, 매번 관측시에 가중치를 업데이트 (확률적 경사 하강법) / 1~ 5단계를 반복하지만 관측치를 배치한 뒤에만 가중치를 업데이트 (배치 경사 하강법)
  7. 전체 훈련 세트가 인공 신경망을 통과하여 에포크를 만들고 계속해서 에포크를 만들게됨. 계속해서 반복할수록 신경망이 점점 더 잘 훈련, 비용함수를 줄여가고 지속적으로 스스로 조정함

0개의 댓글