(* DeepLearning from scratch2 서적을 학습한 후 정리한 내용임 )
1.1 수학과 파이썬 복습
1.1.1 벡터와 행렬
벡터 : 크기와 방향을 가진 양
숫자가 일렬로 늘어선 집합
파이썬에서는 1차원 배열로 처리 (행벡터(세로줄)와 열벡터(가로줄) 2가지 종류)
=> 해당 교재에서는 행벡터를 주로 사용
행렬 : 숫자가 2차원 형태로 늘어선 것
파이썬에서 2차원 배열로 처리
가로줄을 행(row), 세로줄을 열(col)
3 * 2 행렬이란 3행 2열 행렬이며 3행은 3개의 가로줄을 의미, 2열은 2개의 세로줄로 구성되었음을 의미
1 2 ===>> 행
3 4
5 6
↓
열
넘파이에서 행렬관련 함수 사용 예제
import numpy as np
x = np.array([1, 2, 3]) # 넘파이 함수 array를 사용하여 np.ndarray 클래스 개체를 생성
# 해당 클래스에는 다양한 메서드와 변수 제공됨. 예를 들면 shape, ndim
x.shape
(3,) #1*3 형태의 벡터 의미
x.ndim
1 #x의 차원수, x의 행수 리턴
#===================================#
x = np.array([[1,2,3],[4,5,6]])
x.shape
(2,3)
x.ndim
2
1.1.2 행렬의 원소별 연산
W = np.array([[1,2,3],[4,5,6]])
X = np.array([[0,1,2],[3,4,5]])
W + X #원소별 덧셈연산 처리됨
[[1, 3, 5],[7,9,11]] #결과
W * X #원소별 곱셈연산 처리됨
[[[0, 2, 6],[12, 20, 30]]
1.1.3 브로드캐스트
넘파이에서 서로 다른 차원의 행렬끼리 연산처리시 브로드캐스트 기능 적용됨
브로드캐스트 기능:
서로 다른 차원의 2개의 행렬을 연산시 두행렬의 행 크기가 큰 쪽에 맞춰 작은쪽 행을 늘리되 늘어난 행들의 값은 늘리기 전의 행의 마지막 값으로 복사한다
마찬가지로 두 행렬의 열 크기가 큰 쪽에 맞춰 작은쪽 열을 늘리되 늘어난 열들의 값은 늘리기 전의 열의 마지막 값으로 복사한다
이렇게 두 행렬의 행과 열의 차원을 모두 맞춘 후 연산을 진행하게 되는데 이런 기능을 브로드캐스트라고 한다
예를 들어
[ 1, 2] + [10, 20] ==>브로드캐스트 기능 적용==> [1,2] + [10,20] =>원소별 연산 => [11, 22]
[ 3, 4] [3,4] [10,20] [13, 24]
1.1.4 벡터의 내적과 행렬의 곱
* 벡터내적
2개의 벡터 X=(X1, X2, ..., Xn), Y = (Y1, Y2, ..., Yn)에 대한 벡터 내적은 다음과 같다.
X · Y = X1Y1 + X2Y2 + ... + XnYn
벡터의 내적은 두 벡터에서 대응하는 원소들의 곱을 모두 더한 것이다
내적의 의미는 두 벡터가 얼마나 같은 방향을 향하고 있는가를 나타낸다. 값이 클 수록 같은 방향을 향하고 있음을 의미한다
* 행렬의 곱
두 행렬의 곱은 왼쪽 행렬의 행벡터(가로방향)와 오른쪽 행렬의 열벡터(세로방향)의 내적(원소별 곱의 합)으로 계산한다
벡터와 행렬의 곱은 넘파이의 numpy의 dot() 와 matnul() 메서드를 이용한다
a = np.array([1,2,3])
b = np.array([4,5,6])
np.dot(a, b)
==> 1*4 + 2*5 + 3*6 = 32
A = np.array([ [1,2],[3,4]])
B = np.array([ [5,6],[7,8]])
np.matmul( A, B )
==> [1 * 5 + 2 * 7 = 19, 1 * 6 + 2 * 8 = 22]
[3 * 5 + 4 * 7 = 43, 3 * 6 + 4 * 8 = 50]
1.1.5 행렬 형상 확인
두 행렬의 곱을 계산할 때 좌측행렬의 열수와 우측행렬의 행수가 같아야 연산이 가능하며 그 결과로 나오는 행렬의 행수는 좌측행렬의 행수와 동일하고 결과행렬의 열수는 우측행렬의 열수와 동일하다
'인공지능 > DeepLearning from Scratch 2' 카테고리의 다른 글
DeepLearning from scratch2 - 1.3.3 연쇄법칙 (딥러닝 학습) (0) | 2019.07.11 |
---|---|
DeepLearning from scratch2 - 1.3.2 미분과 기울기 (딥러닝 학습) (0) | 2019.07.11 |
DeepLearning from scratch2 - 1.3.1 손실함수 (딥러닝 학습) (0) | 2019.07.09 |
DeepLearning from scratch2 - 1.2.2 계층으로 클래스화 및 순전파 구현 (딥러닝 학습) (0) | 2019.07.07 |
DeepLearning from scratch2 - 1.2.1 신경망 추론 (딥러닝 학습) (0) | 2019.07.04 |