Skip to content

Commit

Permalink
Fine tune code and translation.
Browse files Browse the repository at this point in the history
Update and format chap4 code.
Use default math fonts.
Enable history appendix.
  • Loading branch information
zhanggyb committed Apr 16, 2016
1 parent e5f6d5d commit 9efe799
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 100 deletions.
149 changes: 74 additions & 75 deletions chap4.tex
Original file line number Diff line number Diff line change
Expand Up @@ -298,50 +298,50 @@ \section{一个输入和一个输出的普遍性}
如果你能这样做,那么整体来看网络的输出会是 $f(x)$ 的一个很好的近似\footnote{
注意我已经将输出神经元上的偏置设置为 $0$。}。

那么你的挑战,是设计一个神经网络可近似上面显示的目标函数。为了尽可能多地学习,我
希望你能分两次解决这个问题。第一次,请在图形上点击,直接调整不同的凹凸函数的高度。
你应该能发现找到一个很好的匹配的目标函数是很容易的。你做的有多好通过目标函数和网
络实际计算函数的\emph{平均偏差}来衡量。你的挑战是尽可能\emph{}的平均偏差。当你
将平均偏差争取到 $0.40$ 或以下时,你完成了挑战。
那么你的挑战,是在%
\href{http://neuralnetworksanddeeplearning.com/chap4.html#universality_with_one_input_and_one_output}{%
网页}上设计一个神经网络可近似上面显示的目标函数。为了尽可能多地学习,我希望你
能分两次解决这个问题。第一次,请在图形上点击,直接调整不同的凹凸函数的高度。你应
该能发现找到一个很好的匹配的目标函数是很容易的。你做的有多好通过目标函数和网络实
际计算函数的\emph{平均偏差}来衡量。你的挑战是尽可能\emph{}的平均偏差。当你将平
均偏差争取到 $0.40$ 或以下时,你完成了挑战。

一旦你完成了,点击“重置”,随机重新初始化凹凸形状。你第二次解决问题时,忍住在图
形上点击的冲动。相反,修改左边的 $h$ 值,并再次尝试将平均偏差争取到 $0.40$ 或以
下。
下。点击下面的图形可链接到网页并开始你的设计。
\begin{center}
\includegraphics{design_function}
\href{http://neuralnetworksanddeeplearning.com/chap4.html#universality_with_one_input_and_one_output}{\includegraphics{design_function}}
\end{center}

一个完成的图形示例
一个完成的图形看起来像是这样
\begin{center}
\includegraphics{design_function_success}
\end{center}

你现在已经解决了所有网络的必要元素来近似计算函数
$f(x)$!这只是一个粗略的近似,但我们可以很容易地做得更好,仅仅通过增加隐藏神经元
对的数量,分配更多的凹凸形状。
你现在已经解决了所有网络的必要元素来近似计算函数 $f(x)$!这只是一个粗略的近似,
但我们可以很容易地做得更好,仅仅通过增加隐藏神经元对的数量,分配更多的凹凸形状。

特别是,将我们已经找到的所有数据转换回神经网络使用的标准参数设定是很容易的。让我
快速总结一下那是如何工作的。

第一层的权重都有一些大的,恒定的值,比如:$w = 1000$

隐藏神经元上的偏置只是 $b = -w s$。例如,对于第二个隐藏神经元 $s = 0.2$ 变成
$b = -1000 \times 0.2 = -200$
隐藏神经元上的偏置只是 $b = -w s$。例如,对于第二个隐藏神经元 $s = 0.2$ 变成了
$b = -1000 \times 0.2 = -200$

最后一层的权重由 $h$ 值决定。例如,我们上面已经选择的第一个 $h$$h = -0.5$意味
着顶部两个隐藏神经元的相应的输出权重是 $-0.5$$0.5$。如此等等,确定整个层的输
出权重
最后一层的权重由 $h$ 值决定。例如,我们上面已经选择的第一个 $h$$h = -0.5$
味着顶部两个隐藏神经元的相应的输出权重是 $-0.5$$0.5$。如此等等,确定整个层的
输出权重

最后,输出神经元的偏置为 $0$

这是所有要做的事情:现在我们有了一个可以很好计算我们原始目标函数的神经网络的完整
的描述。而且我们理解如何通过提高隐层神经元的数目来提高近似的质量。

更重要的是,关于我们的原始目标函数
$f(x) = 0.2+0.4 x^2+0.3 \sin(15 x) + 0.05 \cos(50 x)$,没有什么特别的。我们可以用
这个程序计算任何定义域为 $[0, 1]$,值域为$[0, 1]$ 的连续函数。在本质上,我们使用
我们的单层神经网络来建立一个函数的查找表。我们将能够建立这个思想,以提供普遍性的
一般性证明。
更重要的是,关于我们的原始目标函数 $f(x) = 0.2+0.4 x^2+0.3 \sin(15 x) + 0.05
\cos(50 x)$,没有什么特别的。我们可以用这个程序计算任何定义域为 $[0, 1]$,值域为
$[0, 1]$ 的连续函数。在本质上,我们使用我们的单层神经网络来建立一个函数的查找表。
我们将能够建立这个思想,以提供普遍性的一般性证明。

\section{多个输入变量}
\label{sec:many_input_variables}
Expand All @@ -361,12 +361,12 @@ \section{多个输入变量}
\includegraphics{ti_graph}
\end{center}

正如你能看到的,在 $w_2 = 0$ 时输入 $y$ 对神经元的输出没有影响。它就像 $x$ 是唯一
的输入
正如你能看到的,在 $w_2 = 0$ 时输入 $y$ 对神经元的输出没有影响。它就像 $x$ 是唯
一的输入

鉴于此,你认为当我们增加权重 $w_1$$w_1 = 100$,同时 $w_2$ 保持 $0$ 不变时会发
生什么?如果你没有立即明白答案,思考一下问题,看看你能否知道会发生什么。然后尝试
一下,看看你是否是对的。下面的图形序列展示了会发生什么:
鉴于此,你认为当我们增加权重 $w_1$$w_1 = 100$,同时 $w_2$ 保持 $0$ 不变时会
发生什么?如果你没有立即明白答案,思考一下问题,看看你能否知道会发生什么。然后尝
试一下,看看你是否是对的。下面的图形序列展示了会发生什么:
\begin{center}
\begin{tabular}{c c}
\includegraphics{ti_graph-0} & \includegraphics{ti_graph-1}\\
Expand All @@ -384,10 +384,10 @@ \section{多个输入变量}
\includegraphics{ti_graph_redux}
\end{center}

这里,我们假设 $x$ 输入上的权重有一个大的值~——~我使用了 $w1 = 1000$~——~而权
$w_2 = 0$。神经元上的数字是阶跃点,数字上面的小 $x$ 提醒我们阶跃在 $x$ 轴方向。
当然,通过使得 $y$ 输入上的权重取一个非常大的值(例如,$w_2 = 1000$),$x$ 上的权
重等于 $0$,即 $w_1 = 0$,来得到一个 $y$ 轴方向的阶跃函数也是可行的,
这里,我们假设 $x$ 输入上的权重有一个大的值~——~我使用了 $w1 = 1000$~——~而权重
$w_2 = 0$。神经元上的数字是阶跃点,数字上面的小 $x$ 提醒我们阶跃在 $x$ 轴方向。
当然,通过使得 $y$ 输入上的权重取一个非常大的值(例如,$w_2 = 1000$),$x$ 上的
权重等于 $0$,即 $w_1 = 0$,来得到一个 $y$ 轴方向的阶跃函数也是可行的,
\begin{center}
\includegraphics{y_step}
\end{center}
Expand All @@ -398,29 +398,29 @@ \section{多个输入变量}
重为 $0$

我们可以用我们刚刚构造的阶跃函数来计算一个三维的凹凸函数。为此,我们使用两个神经
元,每个计算一个$x$ 方向的阶跃函数。然后我们用相应的权重 $h$$-h$ 将这两个阶跃
函数混合,这里 $h$ 是凸起的期望高度。所有这些在下面图示中说明:
元,每个计算一个$x$ 方向的阶跃函数。然后我们用相应的权重 $h$$-h$ 将这两个阶
跃函数混合,这里 $h$ 是凸起的期望高度。所有这些在下面图示中说明:
\begin{center}
\includegraphics{bump_3d}
\end{center}

试着改变高度 $h$ 的值。观察它如何和网络中的权重关联。并看看它如何改变右边凹凸函数
的高度
试着改变高度 $h$ 的值。观察它如何和网络中的权重关联。并看看它如何改变右边凹凸函
数的高度

另外,试着改变与顶部隐藏神经元相关的阶跃点 $0.30$。见证它如何改变凸起形状。当你移
动它超过和底部隐藏神经元相关的阶跃点 $0.70$ 时发生了什么?
另外,试着改变与顶部隐藏神经元相关的阶跃点 $0.30$。见证它如何改变凸起形状。当你
移动它超过和底部隐藏神经元相关的阶跃点 $0.70$ 时发生了什么?

我们已经解决了如何制造一个 $x$ 方向的凹凸函数。当然,我们可以很容易地制造一
$y$ 方向的凹凸函数,通过使用 $y$ 方向的两个阶跃函数。回想一下,我们通过使 $y$
输入的权重变大$x$ 输入的权重为 $0$ 来这样做。这是结果:
我们已经解决了如何制造一个 $x$ 方向的凹凸函数。当然,我们可以很容易地制造一个
$y$ 方向的凹凸函数,通过使用 $y$ 方向的两个阶跃函数。回想一下,我们通过使 $y$
入的权重变大$x$ 输入的权重为 $0$ 来这样做。这是结果:
\begin{center}
\includegraphics{bump_3d_y}
\end{center}

这看上去和前面的网络一模一样!唯一的明显改变的是在我们的隐藏神经元上现在标记有一
个小的 $y$。那提醒我们它们在产生 $y$ 方向的阶跃函数,不是 $x$ 方向的,并且 $y$
上输入的权重变得非常大$x$ 上的输入为 $0$,而不是相反。正如前面,我决定不去明确
显示它,以避免图形杂乱。
个小的 $y$。那提醒我们它们在产生 $y$ 方向的阶跃函数,不是 $x$ 方向的,并且 $y$
输入的权重变得非常大$x$ 上的输入为 $0$,而不是相反。正如前面,我决定不去明确显
示它,以避免图形杂乱。

让我们考虑当我们叠加两个凹凸函数时会发生什么,一个沿 $x$ 方向,另一个沿 $y$ 方向,
两者都有高度 $h$
Expand Down Expand Up @@ -473,9 +473,9 @@ \section{多个输入变量}
你能明白怎么做吗?试着用下面的网络做实验来解决。请注意,我们现在正在绘制整个网络
的输出,而不是只从隐藏层的加权输出。这意味着我们增加了一个偏置项到隐藏层的加权输
出,并应用 S 型函数。你能找到 $h$$b$ 的值,能产生一个塔型吗?这有点难,所以
如果你想了一会儿还是困住,这是有两个提示:(1)为了让输出神经元显示正确的
{\serif if-then-else} 行为,我们需要输入的权重(所有 $h$$-h$)变得很大;(2)
$b$ 的值决定了 {\serif if-then-else} 阈值的大小。
如果你想了一会儿还是困住,这是有两个提示:(1)为了让输出神经元显示正确的{\serif
if-then-else} 行为,我们需要输入的权重(所有 $h$$-h$)变得很大;(2)$b$
的值决定了 {\serif if-then-else} 阈值的大小。
\begin{center}
\includegraphics{tower_construction}
\end{center}
Expand All @@ -495,8 +495,8 @@ \section{多个输入变量}

让我们尝试将两个这样的网络组合在一起,来计算两个不同的塔型函数。为了使这两个子网
络更清楚,我把它们放在如下所示的分开的方形区域:每个方块计算一个塔型函数,使用上
面描述的技术。右边的图上显示了\emph{第二个}隐藏层的加权输出,即,它是一个加权组合
的塔型函数
面描述的技术。右边的图上显示了\emph{第二个}隐藏层的加权输出,即,它是一个加权组
合的塔型函数
\begin{center}
\includegraphics{the_two_towers}
\end{center}
Expand All @@ -509,8 +509,8 @@ \section{多个输入变量}
\includegraphics{many_towers_2}
\end{center}

尤其通过使第二个隐藏层的加权输出为 $\sigma^{-1} \circ f$ 的近似,我们可以确保网络
的输出可以是任意期望函数 $f$ 的近似。
尤其通过使第二个隐藏层的加权输出为 $\sigma^{-1} \circ f$ 的近似,我们可以确保网
络的输出可以是任意期望函数 $f$ 的近似。

超过两个变量的函数会怎样?

Expand All @@ -519,23 +519,23 @@ \section{多个输入变量}
\includegraphics{tower_n_dim}
\end{center}

这里,$x_1, x_2, x_3$ 表示网络的输入。$s_1, t_1$ 等等是神经元的阶跃点~——~即,第一
层中所有的权重是很大的,而偏置被设置为给出阶跃点 $s_1, t_1, s_2, \ldots$第二层
中的权重交替设置为 $+h, -h$,其中 $h$ 是一个非常大的数。输出偏置为 $-5h/2$
这里,$x_1, x_2, x_3$ 表示网络的输入。$s_1, t_1$ 等等是神经元的阶跃点~——~即,
一层中所有的权重是很大的,而偏置被设置为给出阶跃点 $s_1, t_1, s_2, \ldots$第二
层中的权重交替设置为 $+h, -h$,其中 $h$ 是一个非常大的数。输出偏置为 $-5h/2$

这个网络计算这样一个函数,当三个条件满足时:$x_1$$s_1$$t_1$ 之间;$x_2$
$s_2$$t_2$ 之间;$x_3$$s_3$$t_3$ 之间,输出为 $1$其它情况网络输出
$0$。即,这个塔型在输入空间的一个小的区域输出为 $1$,其它情况输出 $0$
$s_2$$t_2$ 之间;$x_3$$s_3$$t_3$ 之间,输出为 $1$其它情况网络输
出为 $0$。即,这个塔型在输入空间的一个小的区域输出为 $1$,其它情况输出 $0$

通过组合许多个这样的网络我们能得到任意多的塔型,如此可近似一个任意的三元函数。对
$m$ 维可用完全相同的思想。唯一需要改变的是将输出偏置设为 $(-m+1/2)h$为了得到
正确的夹在中间的行为来弄平高原% 翻译成稳定平面?
$m$ 维可用完全相同的思想。唯一需要改变的是将输出偏置设为 $(-m+1/2)h$为了得
到正确的夹在中间的行为来弄平高原% 翻译成稳定平面?

好了,所以现在我们知道如何用神经网络来近似一个多元的实值函数。对于 $f(x_1,
\ldots, x_m) \in R^n$ 的向量函数怎么样?当然,这样一个函数可以被视为 $n$ 个单独的
实值函数$f^1(x_1, \ldots, x_m)$$f^2(x_1, \ldots, x_m)$ 等等。所以我们创建一个网
络来近似 $f^1$,另一个来近似 $f^2$,如此等等。然后简单地把这些网络都组合起来。 所
以这也很容易应付
\ldots, x_m) \in R^n$ 的向量函数怎么样?当然,这样一个函数可以被视为 $n$ 个单独
的实值函数$f^1(x_1, \ldots, x_m)$$f^2(x_1, \ldots, x_m)$ 等等。所以我们创
建一个网络来近似 $f^1$,另一个来近似 $f^2$,如此等等。然后简单地把这些网络都组合
起来。 所以这也很容易应付

\subsection*{问题}

Expand All @@ -553,8 +553,8 @@ \section{S 型神经元的延伸}
\label{sec:extension_beyond_sigmoid_neurons}

我们已经证明了由 S 型神经元构成的网络可以计算任何函数。回想下在一个 S 型神经元中,
输入$x_1, x_2, \ldots$ 导致输出 $\sigma(\sum_j w_j x_j + b)$,这里 $w_j$ 是权
重,$b$ 是偏置,而 $\sigma$ 是 S 型函数:
输入$x_1, x_2, \ldots$ 导致输出 $\sigma(\sum_j w_j x_j + b)$,这里 $w_j$ 是权重,
$b$ 是偏置,而 $\sigma$ 是 S 型函数:
\begin{center}
\includegraphics{sigmoid}
\end{center}
Expand Down Expand Up @@ -589,8 +589,8 @@ \section{S 型神经元的延伸}
\subsection*{问题}

\begin{itemize}
\item 在本书前面我们遇到过其它类型的称
\hyperref[subsec:other_models_of_artificial_neuron]{修正线性单元}的神经元。解
\item 在本书前面我们遇到过其它类型的称为
\hyperref[subsec:other_models_of_artificial_neuron]{修正线性单元}的神经元。解
释为什么这样的神经元不满足刚刚给出的普遍性的条件。找到一个普遍性的证明,证明修
正线性单元可普遍用于计算。
\item 假设我们考虑线性神经元,即具有激活函数 $s(z) = z$ 的神经元。解释为什么线性
Expand Down Expand Up @@ -624,8 +624,7 @@ \section{修补阶跃函数}
\includegraphics{inverted_function_2}
\end{center}

如果我们要使用前面描述的技术做到这一点,我们会使用隐藏神经元产生一系列的凹凸函
数:
如果我们要使用前面描述的技术做到这一点,我们会使用隐藏神经元产生一系列的凹凸函数:
\begin{center}
\includegraphics{series_of_bumps}
\end{center}
Expand All @@ -634,9 +633,9 @@ \section{修补阶跃函数}
些凹凸函数加起来,我们最终会得到一个合理的 $\sigma^{-1} \circ f(x)$ 的近似,除了
那些故障窗口。

假设我们使用一系列隐藏神经元来计算我们最初的目标函数的一半,即
$\sigma^{-1} \circ f(x) / 2$,而不是使用刚刚描述的近似。当然,这看上去就像上一个
图像的缩小的版本
假设我们使用一系列隐藏神经元来计算我们最初的目标函数的一半,即 $\sigma^{-1}
\circ f(x) / 2$,而不是使用刚刚描述的近似。当然,这看上去就像上一个图像的缩小的
版本
\begin{center}
\includegraphics{half_bumps}
\end{center}
Expand All @@ -652,17 +651,17 @@ \section{修补阶跃函数}
在一些小窗口的地方有故障。但是问题比以前要小很多。原因是在一个近似中的故障窗口的
点,不会在另一个的故障窗口中。所以在这些窗口中,近似会有 $2$ 倍的因素更好。

我们甚至能通过加入大量的,用 $M$ 表示,重叠的近似 $\sigma^{-1} \circ f(x) / M$
做得更好。假设故障窗口已经足够窄了,其中的点只会在一个故障窗口中。并且假设我们使
用一个 $M$ 足够大的重叠近似,结果会是一个非常好的整体近似。
我们甚至能通过加入大量的,用 $M$ 表示,重叠的近似 $\sigma^{-1} \circ f(x) / M$
来做得更好。假设故障窗口已经足够窄了,其中的点只会在一个故障窗口中。并且假设我们
使用一个 $M$ 足够大的重叠近似,结果会是一个非常好的整体近似。

\section{结论}
\label{sec:conclusion}

我们已经讨论的对于普遍性的解释当然不是如何使用神经网络计算的切实可行的用法!其更
像是 {\serif NAND} 门或者其它类似的普遍性证明。因为这个原因,我主要专注于让解释更
清晰和易于理解,而不是过于挖掘细节。然而,你可以发现如果你能改进这个解释是个很有
趣和有教益的练习
像是 {\serif NAND} 门或者其它类似的普遍性证明。因为这个原因,我主要专注于让解释
更清晰和易于理解,而不是过于挖掘细节。然而,你可以发现如果你能改进这个解释是个很
有趣和有教益的练习

尽管这个结果并不能直接用于解释网络,它还是是很重要的,因为它解开了是否使用一个神
经网络可以计算任意特定函数的问题。对这个问题的答案总是“是”。所以需要问的正确问
Expand Down
9 changes: 6 additions & 3 deletions history.tex
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ \chapter{修订历史}
\centering
\begin{tabularx}{0.9\textwidth}{ r X }
\toprule
\textbf{更新时间} & \textbf{修订内容}\\\midrule
TBD & Version 1.0. Initial Release.\\
\textbf{更新时间} & \textbf{修订内容}\\
\midrule
2016-03-22 & Version 0.1:第一个正式发布\\
\midrule
2016-04-16 & Version 0.1.1:修正错别字,增加 \href{mailto:xhzhu.nju@gmail}{Xiaohu Zhu} 翻译的附录\\
% \midrule
% \today & Version 1.0. Initial Release.\\
\bottomrule
\end{tabularx}
\caption{Document Changes}
\caption{修订历史}
\label{table:DocumentChanges}
\end{table}
14 changes: 11 additions & 3 deletions main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,16 @@
% for compact item list
\usepackage{paralist}

% ------------------------------------------------------------------------------
% Math - Warning: before cjkfonts (xeCJK) and other package loads fontspec
% ------------------------------------------------------------------------------
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}

% font selection for mathematics with XeLaTeX, MUST after amsfonts
\usepackage{mathspec}

\input{localization.tex}

% Set Roboto and Source Code Pro, which are installed with TexLive, for western
Expand All @@ -85,8 +95,6 @@
\usepackage{setspace}
\onehalfspacing{}

\usepackage{amsmath}

%\usepackage{tikz} % load TikZ/PGF
%\usetikzlibrary{circuits.logic.US,positioning,decorations.pathreplacing,mindmap,backgrounds,math}
\usepackage{pgfplots} % load PDFPlots
Expand Down Expand Up @@ -142,7 +150,7 @@

%\input{faq}

%\input{history}
\input{history}

\backmatter{}

Expand Down
Loading

0 comments on commit 9efe799

Please sign in to comment.