-
How Neural Networks are Implemented Efficiently(Feat. mutmul) | Advanced Learning AlgorithmMachine Learning/Stanford ML Specialization 2024. 2. 10. 05:14
지난 10년동안 Neural Network 분야가 급속도로 성장할 수 있었던 이유중 하나는, 이 신경망을 Vector화 할 수 있었기 때문이다. Matrix(행렬) 곱셈을 사용하면 이 모델을 아주 효율적으로 구현할 수 있다. GPU를 포함한 병렬 컴퓨팅 하드웨어뿐만 아니라, 일부 CPU도 아주 큰 Matrix 곱셈을 수행할 때 아주 능숙하다는 것이 밝혀졌다. 이런 벡터화된 신경망 구현이 어떻게 작동하는지 알아보자.
먼저, loop들과 vectorization을 비교해보자. 먼저, 단일 레이어에서 Forward Propagation을 구현하는 방법을 살펴보자.
x = np.array([200, 17]) W = np.array([[1, -3, 5], [-2, 4, -6]]) b = np.array([-1, 1, 2]) def dense(a_in, W, b): units = W.shape[1] a_out = np.zeros(units) for j in range(units): w = W[:, j] z = np.dot(w, a_in) + b[j] a_out[j] = g(z) return a_out
x라는 인풋을 받아서 미리 정해진 weights(w)과 bias(b)들과 함께 각 노드별 계산을 하고, 값을 얻어낸다. 실제로 위 예시를 갖고 계산을 하게되면 아래와 같은 결과가 나온다.
[1, 0, 1]
이 함수에서 벡터화된 구현을 다음과 같이 개발할 수 있다는것이 밝혀졌다.
# X가 1D가 아닌 2D array이다. X = np.array([[200, 17]]) # 1 x 2 2D array W = np.array([[1, -3, 5], [-2, 4, -6]]) # 이전과 동일 B = np.array([[-1, 1, 2]]) # 1x3 2D array def dense(A_in, W, B): Z = np.matmul(A_in, W) + B A_out = g(Z) return A_out
X와 B를 1차원 Array에서 2차원으로 변형해서 인풋으로 만들었을 때, 전보다 아주 간소하게 코드를 바꿀 수 있었다. matmul은 NumPy가 행렬 곱셈을 수행하는 방법이다. 이제 X와 W는 둘 다 행렬이기 때문에 곱하기만 하면 된다. 리턴된 값은 아래와 같다.
[[1, 0, 1]]
Vectorization이된 함수에서는 모든 인풋들이 2D array가 된다. 이렇게 forward prop(propagation)을 벡터화(vectorization)해서 구현할 수 있다. 그렇다면 실제로 이게 어떻게 계산될까? matmul은 실제로 무엇을 하고 있는걸까?
고대문자 포켓몬 안농들처럼 복잡한 매트릭스의 세계... 하지만 코드를 훨씬 간결하게 해주었다! 이렇게 복잡할땐, 헤이즈의 노래를 듣고 머리를 환기시킨 후 생각해보자.
https://www.youtube.com/watch?v=RFNAq_b_go0
Matrix의 세계로 접속,,,, 뚜 뚜두 뚜,,,, 다음번엔 Matrix의 곱셈에 대해 알아보겠다.
Reference
Advanced Learning Algorithms
In the second course of the Machine Learning Specialization, you will: • Build and train a neural network with TensorFlow to perform multi-class ... 무료로 등록하십시오.
www.coursera.org
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글
Matrix Multiplication Rules | Advanced Learning Algorithm (0) 2024.02.10 Matrix Multiplication | Advanced Learning Algorithm (0) 2024.02.10 Neural Network with NumPy | Advanced Learning Algorithm (1) 2024.02.09 Forward Propagation in NumPy | Advanced Learning Algorithm (1) 2024.02.09 Forward Propagation in a Single Layer | Advanced Learning Algorithm (1) 2024.02.09