데이터 과학

인공신경망에서 행렬 본문

인공지능/기초 인공신경망

인공신경망에서 행렬

티에스윤 2023. 3. 21. 13:31

인공 신경망에서 행렬 이론은 중요한 역할을 합니다. 인공 신경망에서 입력 데이터와 가중치를 행렬로 표현하고, 이를 행렬 곱셈을 통해 계산하는 것이 기본적인 방법 중 하나입니다. 이를 통해 다양한 연산이 가능해지며, 인공 신경망의 학습과 예측 등 다양한 과정에서 활용됩니다.

가장 기본적인 인공 신경망 모델인 다층 퍼셉트론(MLP)에서는 입력 데이터와 가중치를 각각 벡터와 행렬로 표현합니다. 

 

예를 들어, 입력 데이터가 크기가 n인 벡터이고, 첫 번째 은닉층의 가중치가 크기가 n x m인 행렬이라면, 입력 벡터와 가중치 행렬의 곱셈을 통해 크기가 m인 벡터를 얻을 수 있습니다. 이렇게 얻어진 벡터는 다음 은닉층의 입력으로 사용됩니다. 이 과정을 반복하면 출력층까지 도달하게 됩니다.

행렬 이론은 또한 인공 신경망에서 가중치 업데이트에도 중요한 역할을 합니다. 역전파 알고리즘을 사용하여 오차를 역으로 전파할 때, 가중치 업데이트를 위해 미분(편미분)이 필요합니다. 

 

이를 위해 미분 공식과 연쇄 법칙 등의 이론이 활용됩니다.

또한, 인공 신경망에서 정규화(regularization) 기법을 적용할 때에도 행렬 이론이 활용됩니다. 예를 들어, L1 또는 L2 정규화는 가중치 행렬의 원소들에 대해 L1 또는 L2 norm을 취하여 정규화 항을 추가하는 것입니다. 이렇게 하면 가중치 값이 일정 범위 안에 있도록 제한할 수 있습니다.

따라서, 인공 신경망에서 행렬 이론은 모델의 구성, 학습 및 예측, 그리고 정규화 등 다양한 측면에서 중요한 역할을 합니다.
인공 신경망의 학습 과정에서는 입력 데이터와 가중치 행렬을 이용해 예측값을 계산하고, 이를 실제값과 비교하여 오차를 계산합니다. 이 오차를 이용해 가중치를 업데이트하며, 이를 반복하여 모델을 학습시킵니다.

간단한 다층 퍼셉트론(MLP) 모델을 예로 들어 설명해 보겠습니다. MLP 모델에서는 입력 데이터와 가중치를 벡터와 행렬로 표현합니다. 예를 들어, 2개의 입력과 3개의 은닉층 뉴런을 가진 MLP 모델에서는 입력 데이터가 크기가 2인 벡터이고, 첫 번째 은닉층의 가중치가 크기가 2x3인 행렬입니다.

이제 이 모델을 학습시키기 위해 오차를 계산하고, 가중치를 업데이트해보겠습니다. 예를 들어, 입력 데이터가 [1, 2]이고, 가중치가 다음과 같다고 가정해 보겠습니다.

W1 = [[0.1, 0.2, 0.3],
          [0.4, 0.5, 0.6]]



이 경우, 첫 번째 은닉층의 입력은 입력 벡터와 가중치 행렬의 곱셈을 통해 다음과 같이 계산됩니다

h = W1 * x = [[0.1, 0.2, 0.3],    [[1],     [[1.9],
                     [0.4, 0.5, 0.6]]     [2]]  =   [4.8]]



이제 은닉층의 출력인 h를 다음 은닉층의 입력으로 사용하거나, 출력층의 입력으로 사용할 수 있습니다. 이 예에서는 출력층이 없다고 가정하겠습니다. 대신, 실제값이 1.5라고 가정하고, 이와 예측값의 차이를 이용해 오차를 계산해 보겠습니다.


y_pred = h   # 출력층이 없으므로 예측값은 은닉층의 출력인 h와 동일합니다.
y_true = 1.5  # 실제값은 1.5라고 가정합니다.
loss = (y_true - y_pred) ** 2  # 제곱 오차를 계산합니다.

이제 이 오차를 이용해 가중치를 업데이트할 수 있습니다. 일반적으로는 역전파 알고리즘을 사용하여 오차를 역으로 전파하며, 이를 이용해 각 가중치의 기울기를 계산합니다. 

 

이를 도식화 하면 다음과 같습니다. 

 

 

 

 

 

다음은 파이썬 언어로 인공신경망에서 행렬이 어떻게 사용되는지 간단한 예시입니다.

import numpy as np

# 입력 벡터 x와 가중치 행렬 W 생성
x = np.array([1, 2, 3]) # 입력 벡터 x
W = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) # 가중치 행렬 W

# 입력 벡터와 가중치 행렬의 곱 계산
y = np.dot(x, W)

# 출력 벡터 y 출력
print(y)


위의 코드는 입력 벡터 x와 가중치 행렬 W을 생성하고, 이들의 곱을 계산하여 출력 벡터 y를 구합니다. 이때, np.dot 함수를 사용하여 행렬 곱셈을 수행합니다. np.dot 함수는 두 행렬의 곱을 계산하며, 첫 번째 인수로 왼쪽 행렬, 두 번째 인수로 오른쪽 행렬을 전달합니다.

이 코드를 실행하면 출력 결과로 다음과 같은 벡터가 출력됩니다.

[ 3.2  3.8  4.4]


위의 출력 결과는 입력 벡터 x와 가중치 행렬 W의 곱으로 생성된 출력 벡터 y입니다. 이것은 인공신경망의 전방전파(forward propagation) 단계에서 수행되는 연산 중 하나입니다.

 

 

 

 

https://wikidocs.net/37001

 

06-08 벡터와 행렬 연산

앞서 독립 변수 $x$가 2개 이상인 선형 회귀와 로지스틱 회귀에 대해서 배웠습니다. 그런데 다음 실습인 소프트맥스 회귀에서는 종속 변수 $y$의 종류도 3개 이상이 되면서 더욱…

wikidocs.net