{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 連鎖律\n", "\n", "* 簡単な問題は、計算グラフで解くことができる\n", "* 計算グラフを左から右に進めることを **順伝播** (forward propagation) という\n", "* 逆に、右から左に進めることを **逆伝播** (backward propagation) という\n", "* 計算グラフは、一部の複雑な計算を省略した「局所的な計算」を表すことができる" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 計算グラフの逆伝播\n", "\n", "$y = f(x)$を計算グラフで表し、その逆伝播を見てみよう。\n", "\n", "![逆伝播](../draw.io/images-backward-propagation.svg)\n", "\n", "信号$E$を前のノードの結果として、$f(x)$を逆に辿る (つまり$x$として入った値)を知りたい場合、$f(x)$の微分を求める必要があります。\n", "\n", "$f(x)$の微分は$\\frac{\\partial y}{\\partial x}$と表すことができます。\n", "\n", "さらに、前のノードに渡すために乗算をし、$E \\frac{\\partial y}{\\partial x}$ となります。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 連鎖律とは\n", "\n", "$z = (x + y)^2$という式は、以下の2つの式であわらすことができます。\n", "\n", "$$\n", " z = t^2 \\\\\n", " t = x + y\n", "$$\n", "\n", "> ある関数が合成関数で表される場合、その合成関数の微分は、合成関数を構成するそれぞれの関数の微分の積によって表すことができる。\n", "\n", "合成関数は、複数の関数で構成された関数のことを指します。\n", "\n", "$x$に関する$z$の微分は$\\frac{\\partial z}{\\partial x}$、 \n", "$t$に関する$z$の微分は$\\frac{\\partial z}{\\partial t}$、 \n", "$x$に関する$t$の微分は$\\frac{\\partial x}{\\partial t}$とします。\n", "\n", "$z = (x + y)^2$より:\n", "$$\n", " \\frac{\\partial z}{\\partial x} = \\frac{\\partial z}{\\partial t}\\frac{\\partial t}{\\partial x}\n", "$$\n", "\n", "偏微分を求めます。\n", "\n", "$$\n", " \\frac{\\partial z}{\\partial t} = 2t\n", "$$\n", "$$\n", " \\frac{\\partial t}{\\partial x} = 1\n", "$$\n", "\n", "$$\n", " \\frac{\\partial z}{\\partial x} = 2t \\cdot 1 \\\\\n", " = 2(x + y)\n", "$$\n", "\n", "計算グラフで表すと以下になります: \n", "![連鎖律の計算グラフ](../draw.io/images-chain-rule.svg)\n", "\n", "![連鎖律の計算グラフ](../draw.io/images-chain-rule-2.svg)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }