지난 영상에서는 은닉층이 하나인 신경망이
어떤 모습인지 살펴 봤습니다
이 영상에선 신경망이 정확히 어떻게
출력값을 계산하는지 알아봅시다
로지스틱 회귀와 비슷하지만
여러 번 반복됩니다
한번 봅시다
2층 신경망은 이렇게 생겼습니다
이 신경망이 정확히 뭘 계산하는지
자세히 살펴봅시다
전에 말했듯이 로지스틱 회귀를 나타내는 이 원은
두 단계의 계산을 나타냅니다
전에 말했듯이 로지스틱 회귀를 나타내는 이 원은
두 단계의 계산을 나타냅니다
z를 위의 식과 같이 계산하고
활성화 a를 σ(z)로 계산합니다
신경망에선 이걸 많이 반복합니다
먼저 은닉층의 노드 하나를 
집중해서 자세히 살펴보죠
다른 노드는 회색 처리 하겠습니다
로지스틱 회귀와 비슷하게 이 노드는
두 단계의 계산을 합니다
로지스틱 회귀와 비슷하게 이 노드는
두 단계의 계산을 합니다
첫 번째 단계는 이 노드의 왼쪽이라고 생각하고
z = w^T x + b를 계산합니다
첫 번째 단계는 이 노드의 왼쪽이라고 생각하고
z = w^T x + b를 계산합니다
이 값들은 모두 첫 번째 은닉층과 관련됐기 때문에
모두 [1]을 붙여줍니다
은닉층의 첫 번째 노드이기 때문에
아래첨자 1도 붙여줍니다
은닉층의 첫 번째 노드이기 때문에
아래첨자 1도 붙여줍니다
두 번째 단계에선
a_1^[1] = σ(z_1^[1])을 계산해 줍니다
z와 a의 표기법에 대해 말하면
aᵢ^[l]에서 대괄호 안에 있는 l은 층 번호이고
아래 첨자 i는 층 안의 노드 번호입니다
저희가 보고 있는 노드는
1번 층의 1번 노드이므로
아래 첨자와 위 첨자
모두 1이 되죠
신경망의 노드인 원은
이 두 계산을 의미합니다
신경망의 노드인 원은
이 두 계산을 의미합니다
신경망의 두 번째 노드를 살펴보죠
은닉층의 두 번째 노드입니다
왼쪽의 로지스틱 회귀와 비슷하게 이 원은
계산 두 단계를 나타냅니다
첫 번째는 z_2^[1]을 계산하는 겁니다
아직 첫 번째 층이지만 두 번째 노드가 되죠
z_2^[1]은 w_2^[1]T x +b_2^[1]이고
z_2^[1]은 w_2^[1]T x +b_2^[1]이고
a_2^[1]은 σ(z_2^[1])가 됩니다
영상을 잠시 멈추셔도 괜찮습니다
아래 첨자와 위 첨자 표기법은 위에 보라색으로
적은 것과 일치하는 걸 확인 할 수 있습니다
처음 두 은닉 노드를 살펴봤고
나머지 두 노드도 비슷한 계산을 합니다
처음 두 은닉 노드를 살펴봤고
나머지 두 노드도 비슷한 계산을 합니다
이 두 쌍의 등식을 다음 슬라이드로 가져가죠
여기 신경망이 있고 방금 적은 
두 노드에 대한 등식이 있습니다
여기 신경망이 있고 방금 적은 
두 노드에 대한 등식이 있습니다
나머지 노드에 대한 식도 적을 수 있습니다
나머지 노드에 대한 식도 적을 수 있습니다
표기법을 이해하기 쉽게 말하자면
이건 벡터 w_1^[1]의 전치에 x를 곱한 겁니다
위 첨자 T는 전치라는 뜻이죠
예상했겠지만 신경망을
for 문을 써서 구현하면 굉장히 비효율적입니다
그래서 이 네 등식을 벡터화하겠습니다
먼저 z를 벡터로 계산하는 법을 보겠습니다
먼저 z를 벡터로 계산하는 법을 보겠습니다
w를 행렬처럼 쌓는다면
열 벡터의 전치인 행 벡터 w_1^[1] T와 
w_2^[1] T, w_3^[1] T, w_4^[1] T가 됩니다
열 벡터의 전치인 행 벡터 w_1^[1] T와 
w_2^[1] T, w_3^[1] T, w_4^[1] T가 됩니다
열 벡터의 전치인 행 벡터 w_1^[1] T와 
w_2^[1] T, w_3^[1] T, w_4^[1] T가 됩니다
벡터 w를 쌓아서 행렬을 만든 거죠
다른 방식으로 생각하면
로지스틱 회귀 유닛 네 개가 있고
다른 방식으로 생각하면
로지스틱 회귀 유닛 네 개가 있고
각 유닛은 상응하는
매개 변수 w가 있습니다
그 네 벡터를 쌓으면 (4, 3) 행렬을 얻습니다
이 행렬을 입력 특성 x_1, x_2, x_3과 곱하면
행렬 곱 규칙에 따라서
w_1^[1] T x, w_2^[1] T x, w_3^[1] T x, w_4^[1] T x를
얻게 됩니다
w_1^[1] T x, w_2^[1] T x, w_3^[1] T x, w_4^[1] T x를
얻게 됩니다
b_1, b_2, b_3, b_4로 이루어진
b를 잊지 말고 더해준다면
b_1, b_2, b_3, b_4로 이루어진
b를 잊지 말고 더해준다면
여기 있는 벡터와 같습니다
결과에 각 값을 더해주면 되겠죠
결과에 각 값을 더해주면 되겠죠
결과의 각 행은 위에서 계산한 네 값과
정확히 일치한다는 걸 알 수 있습니다
결과의 각 행은 위에서 계산한 네 값과
정확히 일치한다는 걸 알 수 있습니다
따라서 이 값은 z_1^[1], z_2^[1], z_3^[1], z_4^[1]와
같다는 걸 볼 수 있죠
따라서 이 값은 z_1^[1], z_2^[1], z_3^[1], z_4^[1]와
같다는 걸 볼 수 있죠
따라서 이 값은 z_1^[1], z_2^[1], z_3^[1], z_4^[1]와
같다는 걸 볼 수 있죠
각 z를 열 벡터로 쌓은 이 벡터를
z^[1]이라고 부르겠습니다
벡터화 할 때
여러분을 도와줄 수 있는 조언은
한 층에 노드가 여러 개이면
세로로 쌓는다는 것입니다
은닉 층의 네 노드에 상응하는
z_1^[1]부터 z_4^[1]를 세로로 쌓아서
벡터 z^[1]을 만든 이유이죠
표기법 하나를 더 보여주자면
w를 쌓아서 만든 이 (4, 3) 행렬은
W^[1]라고 부르겠습니다
이 (4, 1) 벡터는 b^[1]라고 부르죠
z를 행렬로 표기하여 계산해봤습니다
마지막으로 해야 할 일은
a의 값을 계산하는 것 입니다
a^[1]을 a_1^[1]부터 a_4^[1]까지
쌓은 벡터로 정의하겠습니다
a^[1]을 a_1^[1]부터 a_4^[1]까지
쌓은 벡터로 정의하겠습니다
a^[1]을 a_1^[1]부터 a_4^[1]까지
쌓은 벡터로 정의하겠습니다
이 값을 쌓아서 a^[1]이라고 부르고
값은 σ(z^[1])이 됩니다
이 시그모이드 함수는 z^[1]의 각 원소들의
시그모이드 값을 계산하는 함수입니다
이 시그모이드 함수는 z^[1]의 각 원소들의
시그모이드 값을 계산하는 함수입니다
다시 보자면 z^[1]은 W^[1]에 x를 곱하고
b^[1]을 더해준 것이고
다시 보자면 z^[1]은 W^[1]에 x를 곱하고
b^[1]을 더해준 것이고
a^[1]은 σ(z^[1])이 됩니다
a^[1]은 σ(z^[1])이 됩니다
다음 슬라이드로 옮겨적죠
여기서 볼 수 있는건
신경망의 첫 층에서는
x가 주어졌을 때
z^[1]은 W^[1] x + b^[1]이고
a^[1]은 σ(z^[1])이 됩니다
z의 차원은 (4, 3) 행렬과 (3, 1) 벡터를 곱하고
(4, 1) 벡터를 더해 (4, 1)이고
z의 차원은 (4, 3) 행렬과 (3, 1) 벡터를 곱하고
(4, 1) 벡터를 더해 (4, 1)이고
a는 z와 같은 (4, 1) 벡터입니다
x는 a^[0]이고 ŷ는 a^[2]라는 걸 기억하세요
x는 a^[0]이고 ŷ는 a^[2]라는 걸 기억하세요
따라서 x를 a^[0]으로 바꿀 수 있습니다
a^[0]는 입력 특성 벡터인 x의 가명이라 할 수 있죠
비슷한 방법으로 다음 층에 대한 표현도
비슷하단 걸 알아낼 수 있습니다
비슷한 방법으로 다음 층에 대한 표현도
비슷하단 걸 알아낼 수 있습니다
출력층에서는 매개 변수 w^[2]와 b^[2]가 있고
w^[2]는 (1, 4) 행렬이고
b는 실수인 (1, 1) 행렬입니다
따라서 z^[2]는 실수가 되겠죠
(1, 1) 행렬이라고 씁시다
(1, 4) 행렬과 (4, 1) 행렬을 곱한 뒤
(1, 1) 행렬을 더해줬죠
(1, 4) 행렬과 (4, 1) 행렬을 곱한 뒤
(1, 1) 행렬을 더해줬죠
결과는 실수가 됩니다
마지막 출력 유닛을 매개 변수 w와 b를 가지는
로지스틱 회귀와 비슷하게 생각하면
w는 W^[2]T와 비슷하고
b는 b^[2]와 비슷합니다
w는 W^[2]T와 비슷하고
b는 b^[2]와 비슷합니다
w는 W^[2]T와 비슷하고
b는 b^[2]와 비슷합니다
왼쪽 부분을 가리고 무시한다면
마지막 출력 유닛은
로지스틱 회귀와 굉장히 흡사하죠
w와 b 대신에 (1, 4) 차원 W^[2]와
(1, 1) 차원 b^[2]를 쓰는 것만 빼면요
w와 b 대신에 (1, 4) 차원 W^[2]와
(1, 1) 차원 b^[2]를 쓰는 것만 빼면요
복습하자면
로지스틱 회귀에서 출력 혹은
예측값을 계산하려면
z = w^Tx + b와
ŷ = a = σ(z)를 계산했습니다
z = w^Tx + b와
ŷ = a = σ(z)를 계산했습니다
z = w^Tx + b와
ŷ = a = σ(z)를 계산했습니다
은닉층이 하나인 신경망에서는
출력값을 계산하기 위해
이 네 등식을 구현하면 됩니다
출력값을 계산하는
벡터화된 구현이라고 생각할 수 있죠
은닉층의 네 로지스틱 회귀 유닛의
출력값 계산은 여기서 하고
출력층의 로지스틱 회귀는 여기서 해줍니다
설명이 잘 됐으면 좋겠네요
여기서 일아야 할 점은
이 신경망의 출력값을 계산하는 데엔
이 코드 네 줄만이 필요하다는 것입니다
한 입력 특성 벡터가 주어졌을때
코드 네 줄만으로 
신경망의 출력값을 계산하는 법을 봤습니다
코드 네 줄만으로 
신경망의 출력값을 계산하는 법을 봤습니다
로지스틱 회귀에서처럼 여기서도
여러 개의 훈련 샘플에 대해 벡터화하고 싶습니다
훈련 샘플을 행렬의 열로 쌓아 조금 변형하면
로지스틱 회귀에서 본 것처럼
한 번에 한 훈련 샘플이 아닌
로지스틱 회귀에서 본 것처럼
한 번에 한 훈련 샘플이 아닌
모든 훈련 세트에 대해
출력값을 계산 할 수 있습니다
다음 영상에서 자세히 살펴보죠
