{
"cells": [
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"# 일관된 출력을 위해 유사난수 초기화\n",
"def reset_graph(seed=42):\n",
" tf.reset_default_graph()\n",
" tf.set_random_seed(seed)\n",
" np.random.seed(seed)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CHAPTER 11. 심층 신경망 훈련\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"앞 장에서 인공 신경망을 소개했고 두 개의 은닉층만 있는 매우 얕은 심층 신경망을 훈련시켰음
\n",
"아주 복잡한 문제를 다뤄야 한다면 아마도 훨씬 더 깊은 심층 신경망을 훈련시켜야 함. 이건 그리 쉬운 일이 아님
\n",
"- 첫째, 까다로운 **그래디언트 소실**vanishing gradient(또는 **그래디언트 폭주**exploding gradient) 문제에 직면함\n",
"- 둘째, 이런 대규모 신경망에서는 훈련이 극단적으로 느려짐\n",
"- 셋째, 수백만 개의 파라미터를 가진 모델은 훈련 세트에 과대적합될 위험이 매우 큼
\n",
"\n",
"이 장에서는 이 문제들을 차례대로 살펴보고 해결 방법을 제시하겠음"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## 11.1 그래디언트 소실과 폭주 문제"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- **그래디언트 소실** : 알고리즘이 하위층으로 진행됨에 따라 그래디언트는 점점 작아지는 경우를 말함. 결국 경사 하강법이 하위층의 연결 가중치를 실제 변경되지 않은 채로 둬 훈련이 좋은 솔루션으로 수렴되지 않음
\n",
"- **그래디언트 폭주** : 그래디언트 소실과 반대 현상으로 그래디언트가 점점 커져 여러 개의 층이 비정상적으로 큰 가중치로 갱신되어 알고리즘이 발산하는 경우를 말함"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 로지스틱 활성화 함수를 보면(그림 11-1) 입력의 절댓값이 크면 0이나 1로 수렴해서 기울기가 0에 매우 가까워지는 것을 알 수 있음.
\n",
"- 역전파가 될 때 사실상 신경망으로 전파시킬 그래디언트가 거의 없고 조금 있는 그래디언트는 최상위층에서부터 역전파가 진행됨에 따라 점차 약해져서 실제로 아래쪽 층에는 아무것도 도달하지 않게 됨."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"