Sequential 모델은 레이어들이 일렬로 쭉 나열된 형태이며 쉽게 레이어 구성할 수 있습니다. 그래서 Sequential모델의 summery를 보고 모델 구조를 파악하는 연습을 해보도록 하겠습니다. input_dim(혹은 input_shape)에서 받은 노드 갯수를 그대로 입력으로, Dense(5)와 Dense레이어 모델의 파라미터 값으로 준 값을 그대로 아웃풋의 갯수로 받습니다.
두번째 레이어는 앞의 레이어의 출력값을 그대로 입력을 받게 되므로 입력 값은 5, 출력 값은 3이 됩니다.
model.add(Dense(1))
세번째 레이어는 입력3, 출력1
위 모델을 그림으로 표현해보면 다음과 같습니다.
model.summary()
구현한 위 모델을 확인해봅시다.
Layer(type) :
레이어의 이름과 타입을 나타냅니다. 알아서 레이어의 이름을 지정해줍니다. 따로 지정해주고 싶을때는 Dense에 파라미터로 name='지정하고싶은 이름'을 주면 됩니다. dense_1, dense_2, dense_3 이라고 이름 붙여진 3개의 Dense레이어가 생성된 것을 볼 수 있습니다.
Output Shape:
(None, 5)이라는 뜻은 None개의 행과 5개의 아웃풋 값이 주어졌다는 것을 뜻합니다. 행이 None으로 지정되는 이유는 데이터의 갯수는 계속해서 추가될 수 있기 때문에 딥러닝 모델에서는 주로 행을 무시하고 열의 shape을 맞추어주는 작업을 많이 수행합니다. 첫번째 레이어의 아웃풋 갯수는 5, 두번째 레이어의 아웃풋 갯수는 3, 마지막 레이어의 아웃풋 갯수는 1임을 뜻합니다.
Param:
파라미터의 수, 즉 각 입력노드와 출력노드에 대해 연결된 간선의 수를 뜻합니다.
첫번째 레이어는 인풋이 1개, 아웃풋이 5개 이므로 1*5=5개의 간선이 존재해야 하는데 10개의 간선이 있다고 표시되어 있습니다. 이유는 무엇일까요? 바로 인풋에 Bias(b) 노드가 추가되기 때문입니다.
따라서 첫번째 레이어에는 입력값(1)+바이어스노드(1)=2 총 2개의 인풋 노드가 있으므로 파라미터의 갯수는 2*5로 10개가 되는 것입니다.
마찬가지로 두번째 레이어에는 6*3=18개 세번째 레이어에는 4*1=4개의 파라미터가 존재하게 됩니다.
▷ y = Wx + b에 대해서
선형 그래프를 그리는 경우H(x) = Wx + b로 표현할 수 있습니다. 이 방정식을 가설(Hypothesis)이라고 합니다. 선의 모양은 W와 b에 따라서 다르게 나타나며 어떤 그래프가 가장 정확한 값을 예측할 수 있을지 알아내는 방법이 중요하게 됩니다.
여기서 W는 직선의 기울기가 되고 b는 y축을 지나는 'y 절편'이 됩니다. 여기서 x 값은 독립변수고 y값은 종속 변수입니다. 즉, x 값에 따라 y 값은 반드시 달라집니다. 다만, 정확하게 계산하려면 상수 W와 b의 값을 알아야합니다. 따라서직선을 훌륭하게 그으려면 직선의 기울기 a 값과 y 절편 b 값을 정확히 예측해 내야 하는 것입니다.
선형 회귀는 정확한 직선을 그려내는 과정입니다. 바꿔말하면,선형 회귀는 결국 최적의 W 값과 b 값을 찾아내는 작업이라고 할 수 있습니다.
- 공부한 시간(x) 평균 : (10 + 9 + 3 + 2) / 4 = 6
- 성적(y) 평균 : (90 + 80 + 50 + 30) / 4 = 62.5
위를 a 식에 대입하면 결과는 7.7입니다. 7.7이 바로 기울기입니다.
다음은 y 절편인 b를 구해보겠습니다. y의 평균에서 x의 평균과 기울기의 곱을 빼면 b의 값이 나온다는 의미입니다. 우리는 이미 y의 평균에서 x의 평균과 기울기 a까지, 이 식을 풀기 위해 필요한 모든 변수를 알고 있습니다. 이 식을 대입하면 16.3이 나옵니다.
y 절편 b는 16.3가 나왔고 예측 값을 구하기 위한 직선의 방정식이 완성될 수 있습니다.
이 식에 우리가 가진 데이터 값을 대입했을때 나오는 y 값을 '예측 값'이라고 할 수 있습니다.
와 같은 다양한 레이어들이 존재합니다. 이를 이용해 다양한 모델을 구성하거나 이전에 구성했던 모델을 불러와서 재사용, 추가 등을 할 수도 있고 차근차근 다뤄볼 예정입니다. 이를 이용해 다양한 모델을 구성하면 위 예제와 같이 파라미터로 준 값이 입력, 출력 노드개수 그대로 출력되지 않는 경우도 많습니다. 그때는 또 summery를 보는 방법이 달라지게 됩니다.