신경망(Neural Networks)
AI 신경망은 뇌과학에서 영감을 받았다. 뇌에서 뉴런은 서로 연결되어 네트워크를 형성하는 세포이다. 각 뉴런은 전기 신호를 수신하고 보낼 수 있다. 뉴런이 수신하는 전기 입력이 특정 임계값을 넘으면, 뉴런이 활성화되어 전기 신호를 앞으로 보낸다.
인공 신경망(Artificial Neural Network)은 생물학적 신경망에서 영감을 받아 학습을 위한 수학적 모델이다. 인공 신경망은 네트워크의 구조와 매개변수를 기반으로 입력을 출력으로 매핑하는 수학적 함수를 모델링한다. 인공 신경망에서는 데이터 학습을 통해 네트워크의 구조가 형성한다.
AI가 구현될 때, 각 뉴런의 병렬은 다른 유닛에 연결된 유닛(unit)이다 . 예를 들어, 지난 강의와 같이 AI는 두 개의 입력 x₁과 x₂를 오늘 비가 올지 여부에 매핑할 수 있었다. 지난 강의에서 우리는 이 가설 함수에 대해 다음과 같은 형태를 제공했었다: h(x₁, x₂) = w₀ + w₁x₁ + w₂x₂
여기서 w₁ 과 w₂는 입력을 수정하는 가중치이고, w₀는 전체 표현식의 값을 수정하는 바이어스(bias)라고도 하는 상수이다.
활성화 함수(Activation Functions)
비가 올지 말지를 결정하기 위해 가설 함수를 사용하려면, 함수가 생성하는 값에 따라 어떤 종류의 임계값을 만들어야 한다.
이를 수행하는 한 가지 방법은 특정 임계값에 도달하기 전에 0을 제공하고 임계값에 도달한 후에 1을 제공하는 단계 함수(step function)를 사용하는 것이다.
이를 해결하는 또 다른 방법은 논리 함수(logistic function)를 사용하는 것이다. 논리 함수는 0에서 1까지의 실수를 출력으로 제공하여 판단에 대한 단계적 확신을 표현한다.
또 다른 가능한 함수는 ReLU(Rectified Linear Unit)로, 출력이 어떤 양수의 값이든 허용한다. 값이 음수이면 ReLU는 값을 0으로 설정한다.
어떤 함수를 사용하든, 우리는 지난 강의에서 입력이 bias 외에 가중치에 의해 수정되고, 그 합이 활성화 함수에 전달된다는 것을 배웠다. 이는 단순한 신경망에도 적용된다.
신경망 구조(Neural Network Structure)
신경망은 함수가 입력을 합산하여 출력을 생성하는 위의 아이디어를 표현한 것으로 생각할 수 있다.
왼쪽에 있는 두 개의 흰 유닛은 입력이고 오른쪽에 있는 유닛은 출력이다. 입력은 가중그래프 간선(weighted edge)에 의해 출력에 연결된다. 결정을 내리기 위해, 출력 장치는 입력에 bias(w₀) 외에 가중치를 곱하고 함수 g를 사용하여 출력을 결정한다.
예를 들어, Or 논리 연결은 다음 진리표를 사용하여 함수 f로 표현될 수 있다:
우리는 이 함수를 신경망으로 시각화할 수 있다. x₁은 하나의 입력 unit이고, x₂는 또 다른 입력 unit이다. 이들은 가중치가 1인 edge로 출력 unit에 연결된다. 그런 다음 출력 unit은 임계값이 0인 함수 g(-1 + 1x₁ + 1x₂)를 사용하여 0 또는 1(거짓 또는 참)을 출력한다.
예를 들어 x₁ = x₂ = 0인 경우 합계는 g(-1)이다. 이는 임계값 미만이므로 함수 g는 0을 출력한다. 그러나 x₁ 또는 x₂ 중 하나 또는 둘 모두가 1과 같으면 모든 입력의 합은 0 또는 1이 된다. 둘 다 임계값 이상이므로 함수는 1을 출력한다.
비슷한 과정을 And 함수(bias가 (-2)가 됨)로 반복할 수 있다: g(-2 + 1x₁ + 1x₂). 비슷한 과정을 사용하여 습도와 기압을 입력으로 받고 강수 확률을 출력으로 생성할 수 있다. 또는 다른 예에서 입력은 광고에 사용된 돈과 지출된 월이 되어 판매에서 예상되는 수익의 출력을 얻을 수 있다. 각 입력 x₁ … xₙ 에 가중치 w₁ … wₙ를 곱하고 결과 값을 합산한 다음 바이어스 w₀를 추가하여 여러 입력으로 확장할 수 있다.
경사하강법(Gradient Descent)
경사 하강법은 신경망을 훈련할 때 손실을 최소화하기 위한 알고리즘이다. 앞서 언급했듯이 신경망은 데이터에서 네트워크 자체의 구조에 대한 지식을 추론할 수 있다. 지금까지는 다양한 가중치를 정의했지만 신경망은 훈련 데이터를 기반으로 이러한 가중치를 계산할 수 있다. 이를 위해 경사 하강법 알고리즘을 사용하는데, 이 알고리즘은 다음과 같은 방식으로 작동한다:
- 무작위로 가중치를 선택하는 것부터 시작한다. 이것은 각 입력에 얼마나 많은 가중치를 부여해야 하는지 알 수 없는 평범한 출발점이다.
- 반복:
- 손실이 감소하는 모든 데이터 포인트를 기반으로 경사값을 계산한다. 궁극적으로 경사값은 벡터(숫자의 배열)이다.
- 기울기에 따라 가중치를 업데이트한다.
이러한 종류의 알고리즘의 문제점은 모든 데이터 포인트를 기반으로 기울기를 계산해야 하므로 계산 비용이 많이 든다는 것이다. 이 비용을 최소화하는 방법에는 여러 가지가 있다:
예를 들어 확률적 경사하강법(Stochastic Gradient Descent )에서는 무작위로 선택한 한 점을 기준으로 경사가 계산된다. 이러한 종류의 경사는 매우 부정확할 수 있으며, 그로 인해 미니 배치 경사하강법(Mini-Batch Gradient Descent) 알고리즘으로 이어진다. 이 알고리즘은 무작위로 선택된 몇 개의 점을 기반으로 경사를 계산하여 계산 비용과 정확도 사이의 절충안을 찾는다. 흔히 그렇듯이 이러한 솔루션 중 어느 것도 완벽하지 않으며 상황에 따라 다양한 솔루션이 사용될 수 있다.
경사하강법을 사용하면 많은 문제에 대한 답을 찾을 수 있다. 예를 들어, “오늘 비가 올까?”보다 더 많은 것을 알고 싶을 수도 있다. 몇 가지 입력을 사용하여 다양한 종류의 날씨에 대한 확률을 생성한 다음 가장 가능성이 높은 날씨를 선택할 수 있다.
이는 모든 입력과 출력으로 수행할 수 있으며, 각 입력은 각 출력에 연결되고 출력은 우리가 내릴 수 있는 결정을 나타낸다. 이러한 종류의 신경망에서 출력은 연결되지 않는다는 점에 유의해야 한다. 즉, 각 출력과 모든 입력의 연관된 가중치는 개별 신경망으로 볼 수 있으며, 따라서 나머지 출력과 별도로 학습할 수 있다.
지금까지 우리의 신경망은 퍼셉트론 출력 유닛에 의존했었다. 이는 직선을 사용하여 데이터를 분리하는 선형 결정 경계만 학습할 수 있는 유닛이다. 즉, 선형 방정식을 기반으로 퍼셉트론은 입력을 한 유형 또는 다른 유형으로 분류할 수 있다(예: 왼쪽 그림). 그러나 종종 데이터는 선형적으로 분리할 수 없다(예: 오른쪽 그림). 이 경우, 우리는 다층 신경망으로 전환하여 데이터를 비선형적으로 모델링한다.
다층 신경망(Multilayer Neural Network)
다층 신경망은 입력 계층, 출력 계층, 그리고 하나 이상의 숨겨진 계층이 있는 인공 신경망이다 . 우리는 모델을 훈련하기 위해 입력과 출력을 제공하지만 우리 인간은 숨겨진 레이어 내부의 단위에 어떤 값도 제공하지 않는다. 첫 번째 숨겨진 계층의 각 unit은 입력 계층의 각 unit들로부터 가중치를 받아 이에 대해 어떤 작업을 수행하고 값을 출력한다. 이러한 각 값은 가중치가 부여되어 다음 계층으로 전파되며 출력 계층에 도달할 때까지 프로세스를 반복한다. 숨겨진 계층을 통해 비선형 데이터 모델링이 가능하다.
역전파(Backpropagation)
역전파는 은닉 계층이 있는 신경망을 훈련하는 데 사용되는 주요 알고리즘이다. 출력 unit의 오류로 시작하여 이전 계층의 가중치에 대한 경사 하강을 계산하고 입력 계층에 도달할 때까지 프로세스를 반복한다. 의사 코드에서 알고리즘을 다음과 같이 설명할 수 있다:
- 출력 계층에서 오류 계산
- 각 계층의 경우, 출력 계층부터 시작하여 가장 최근의 숨겨진 계층으로 안쪽으로 이동한다:
- 오류를 한 계층 뒤로 전파한다. 즉, 고려 중인 현재 계층에서 이전 계층으로 오류를 보낸다.
- 가중치를 업데이트한다.
이는 여러 개의 숨겨진 계층으로 확장되어, 2개 이상의 숨겨진 계층이 있는 신경망인 심층 신경망(deep neural networks)을 생성할 수 있다.
드롭아웃(dropout)
과적합은 훈련 데이터를 너무 가깝게 모델링하여 새로운 데이터로 일반화하지 못하는 위험이 있다. 과적합을 방지하는 한 가지 방법은 드롭아웃(dropout)이다. 이 기술에서는 학습 단계에서 무작위로 선택한 unit 일시적으로 제거한다. 이런 방식으로 우리는 네트워크의 특정 unit에 대한 과도한 의존을 방지하려고 노력한다. 훈련 전반에 걸쳐 신경망은 다른 형태를 취하고, 매번 다른 unit을 삭제한 다음 다시 사용한다:
훈련이 완료된 후에는 전체 신경망이 다시 사용된다는 점(4번 사진)에 유의해야 한다.
이로서 우리는 신경망 구현을 위한 것들을 알아봤다. 다음 파트에서는 이것을 코드로 만든 텐서플로우와 이미지를 분석하는 신경망들을 알아보자.
'인공지능 > 인공지능개론' 카테고리의 다른 글
[AI] Language (7) (0) | 2024.07.01 |
---|---|
[AI] Neural Networks (6-2) (0) | 2024.06.28 |
[AI] Learning (5-3) (0) | 2024.06.25 |
[AI] Learning (5-2) (0) | 2024.06.24 |
[AI] Uncertainty (3-3) (2) | 2024.06.24 |