Commit 6c8c8bdb by xiaotong

updates of section 5

parent 684042f3
......@@ -25,13 +25,13 @@
\node [rectangle,inner sep=0.2em,fill=red!20] [fit = (neuron01) (neuron05)] (layer01) {};
\end{pgfonlayer}
\node [anchor=west] (layer00label) at ([xshift=1.25em]x5.east) {\footnotesize{\red{{输入层}}}};
\node [anchor=west] (layer00label) at ([xshift=1.25em]x5.east) {\footnotesize{{输入层}}};
{
\node [anchor=west] (layer01label) at ([xshift=1em]layer01.east) {\footnotesize{第二层}};
}
{
\node [anchor=west] (layer01label2) at (layer01label.east) {\footnotesize{\red{({隐层})}}};
\node [anchor=west] (layer01label2) at (layer01label.east) {\footnotesize{(隐层)}};
}
%%% layer 2
......@@ -57,7 +57,7 @@
\node [anchor=west] (layer02label) at ([xshift=4.5em]layer02.east) {\footnotesize{第三层}};
{
\node [anchor=west] (layer02label2) at (layer02label.east) {\footnotesize{\red{({隐层})}}};
\node [anchor=west] (layer02label2) at (layer02label.east) {\footnotesize{({隐层})}};
}
}
......@@ -87,7 +87,7 @@
\node [anchor=west] (layer03label) at ([xshift=1em]layer03.east) {\footnotesize{第四层}};
{
\node [anchor=west] (layer03label2) at (layer03label.east) {\footnotesize{\red{({输出层})}}};
\node [anchor=west] (layer03label2) at (layer03label.east) {\footnotesize{({输出层})}};
}
}
......
......@@ -8,13 +8,13 @@
\node [anchor=west] (y) at ([xshift=2em]neuron.east) {$y$:去?还是不去?};
\draw [->,thin,red] (x0.east) -- (neuron.150) node [pos=0.5,above,yshift=0.2em] {\small{$w_0=.5$}};
\draw [->,line width=0.5mm,red] (x1.east) -- (neuron.180) node [pos=0.5,above,yshift=-0.1em] {\textbf{\small{$w_1=2$}}};
\draw [->,thin,red] (x2.east) -- (neuron.210) node [pos=0.5,above,yshift=0.1em] {\small{$w_2=.5$}};
\draw [->,thin] (x0.east) -- (neuron.150) node [pos=0.5,above,yshift=0.2em] {\small{$w_0=.5$}};
\draw [->,line width=0.5mm] (x1.east) -- (neuron.180) node [pos=0.5,above,yshift=-0.1em] {\textbf{\small{$w_1=2$}}};
\draw [->,thin] (x2.east) -- (neuron.210) node [pos=0.5,above,yshift=0.1em] {\small{$w_2=.5$}};
\draw [->,thick] (neuron.east) -- (y.west);
\node [anchor=center] (neuronmath) at (neuron.center) {\small{$\sum \ge \sigma$}};
\node [anchor=south] (ylabel) at (y.north) {\red{\textbf{不去了!}}};
\node [anchor=south] (ylabel) at (y.north) {\textbf{不去了!}};
\end{scope}
......
......@@ -162,7 +162,7 @@
%--5.2.1.1标量、向量和矩阵---------------------
\subsubsection{标量、向量和矩阵}\index{Chapter5.2.1.1}
\parinterval {\small\sffamily\bfseries{标量}}(Scalar):标量亦称``无向量'',是一种只具有数值大小而没有方向的量,通俗地说,一个标量就是一个单独的数,这里特指实数\footnote{严格意义上,标量可以是复数等其他形式,这里为了方便讨论,这里仅以实数为对象。}。一般用小写斜体表示标量。比如,对于$ a=5 $$ a $就是一个标量。
\parinterval {\small\sffamily\bfseries{标量}}(Scalar):标量亦称``无向量'',是一种只具有数值大小而没有方向的量,通俗地说,一个标量就是一个单独的数,这里特指实数\footnote{严格意义上,标量可以是复数等其他形式。这里为了方便讨论,仅以实数为对象。}。一般用小写斜体表示标量。比如,对于$ a=5 $$ a $就是一个标量。
\parinterval {\small\sffamily\bfseries{向量}}(Vector):向量是由一组实数组成的有序数组。与标量不同,向量既有大小也有方向。可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。公式\ref{eqa1.1}和公式\ref{eqa1.2}展示了一个行向量和一个列向量。本章默认使用行向量,如$ \mathbf a=(a_1, a_2, a_3) $$ \mathbf a $对应的列向量记为$ \mathbf a^{\rm T} $
%公式--------------------------------------------------------------------
......@@ -178,13 +178,14 @@
\label{eqa1.2}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval {\small\sffamily\bfseries{矩阵}}(Matrix):在数学中,矩阵是一个按照长方阵列排列的实数集合,最早来自于方程组的系数及常数所构成的方阵。在计算机领域,通常将矩阵看作二维数组。我们用粗体的符号$ \mathbf a $表示一个矩阵,如果该矩阵有$ m $$ n $列,那么有$ \mathbf a\in R^{m\times n} $。这里,用不加粗的形式来表示矩阵中的元素,其中每个元素都被一个行索引和一个列索引所确定。例如,$ a_{ij} $表示第$ i $行、第$ j $列的矩阵元素。如下,$ \mathbf a $就定义了一个2行2列的矩阵。
\parinterval {\small\sffamily\bfseries{矩阵}}(Matrix):矩阵是一个按照长方阵列排列的实数集合,最早来自于方程组的系数及常数所构成的方阵。在计算机领域,通常将矩阵看作二维数组。我们用粗体的符号$ \mathbf a $表示一个矩阵,如果该矩阵有$ m $$ n $列,那么有$ \mathbf a\in R^{m\times n} $。这里,用不加粗的符号来表示矩阵中的元素,其中每个元素都被一个行索引和一个列索引所确定。例如,$ a_{ij} $表示第$ i $行、第$ j $列的矩阵元素。如下,$ \mathbf a $就定义了一个2行2列的矩阵。
%公式--------------------------------------------------------------------
\begin{eqnarray}
\mathbf a &=& \begin{pmatrix}
\mathbf a & = & \begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix} \;=\; \begin{pmatrix}
\end{pmatrix} \nonumber \\
& = & \begin{pmatrix}
1 & 2\\
3 & 4
\end{pmatrix}
......@@ -194,7 +195,7 @@
%--5.2.1.2矩阵的转置---------------------
\subsubsection{矩阵的转置}\index{Chapter5.2.1.2}
\parinterval {\small\sffamily\bfseries{转置}}(Transpose)是矩阵的重要操作之一。矩阵的转置可以看作是将矩阵以对角线为镜像进行翻转:假设$ \mathbf a $$ m $$ n $列的矩阵,第$ i $行第$ j $ 列的元素是$ a_{ij} $,即:$ \mathbf a={(a_{ij})}_{m\times n} $,把$ m\times n $矩阵$ \mathbf a $的行换成同序数的列得到一个$ n\times m $矩阵,则得到$ \mathbf a $的转置矩阵,记为$ \mathbf a^{\rm T} $,其中$ a_{ji}^{\rm T}=a_{ij} $。例如:
\parinterval {\small\sffamily\bfseries{转置}}(Transpose)是矩阵的重要操作之一。矩阵的转置可以看作是将矩阵以对角线为镜像进行翻转:假设$ \mathbf a $$ m $$ n $列的矩阵,第$ i $$ j $ 列的元素是$ a_{ij} $,即:$ \mathbf a={(a_{ij})}_{m\times n} $,把$ m\times n $矩阵$ \mathbf a $的行换成同序数的列得到一个$ n\times m $矩阵,则得到$ \mathbf a $的转置矩阵,记为$ \mathbf a^{\rm T} $,其中$ a_{ji}^{\rm T}=a_{ij} $。例如:
\begin{eqnarray}
\mathbf a & = & \begin{pmatrix} 1 & 3 & 2 & 6\\5 & 4 & 8 & 2\end{pmatrix} \\
{\mathbf a}^{\rm T} & = &\begin{pmatrix} 1 & 5\\3 & 4\\2 & 8\\6 & 2\end{pmatrix}
......@@ -228,15 +229,14 @@
%公式--------------------------------------------------------------------
\parinterval 矩阵加法满足以下运算规律:
\parinterval (1)交换律:$ \mathbf a+\mathbf b = \mathbf b +\mathbf a $
\parinterval (2)结合律:$ (\mathbf a+\mathbf b)+\mathbf c = \mathbf a+(\mathbf b+\mathbf c) $
\parinterval (3)$ \mathbf a+\mathbf 0=\mathbf a $,其中$ \mathbf 0 $指的是零矩阵,即元素皆为0的矩阵。
\parinterval (4)$ \mathbf a+(-\mathbf a)=\mathbf 0 $,其中$ -\mathbf a $是矩阵$ \mathbf a $的负矩阵,即将矩阵$ \mathbf a $的每个元素取负得到的矩阵。
\begin{itemize}
\item 交换律:$ \mathbf a+\mathbf b = \mathbf b +\mathbf a $
\item 结合律:$ (\mathbf a+\mathbf b)+\mathbf c = \mathbf a+(\mathbf b+\mathbf c) $
\item $ \mathbf a+\mathbf 0=\mathbf a $,其中$ \mathbf 0 $指的是零矩阵,即元素皆为0的矩阵。
\item $ \mathbf a+(-\mathbf a)=\mathbf 0 $,其中$ -\mathbf a $是矩阵$ \mathbf a $的负矩阵,即将矩阵$ \mathbf a $的每个元素取负得到的矩阵。
\end{itemize}
\parinterval 矩阵的数乘是指标量(实数)与矩阵的乘法运算,计算过程是将标量与矩阵的每个元素相乘,最终得到与原矩阵形状相同的矩阵。例如,矩阵$ \mathbf a={(a_{ij})}_{m\times n} $与标量$ k $进行数乘运算,其结果矩阵$ \mathbf b={(ka_{ij})}_{m\times n} $,即$ k{(a_{ij})}_{m\times n}={(ka_{ij})}_{m\times n} $。下面的式子展示了矩阵数乘的计算过程。
\parinterval 矩阵的{\small\bfnew{数乘}}(Scalar Multiplication)是指标量(实数)与矩阵的乘法运算,计算过程是将标量与矩阵的每个元素相乘,最终得到与原矩阵形状相同的矩阵。例如,矩阵$ \mathbf a={(a_{ij})}_{m\times n} $与标量$ k $进行数乘运算,其结果矩阵$ \mathbf b={(ka_{ij})}_{m\times n} $,即$ k{(a_{ij})}_{m\times n}={(ka_{ij})}_{m\times n} $。下面的式子展示了矩阵数乘的计算过程。
%公式--------------------------------------------------------------------
\begin{eqnarray}
\mathbf a & = &
......@@ -255,11 +255,11 @@
%公式--------------------------------------------------------------------
\parinterval 矩阵的数乘满足以下运算规律,其中$ k $$ l $是实数,$ \mathbf a $$ \mathbf b $是矩阵:
\parinterval (1)右分配律:$ k(\mathbf a+\mathbf b)=k\mathbf a+k\mathbf b $
\parinterval (2)左分配律:$ (k+l)\mathbf a=k\mathbf a+l\mathbf a $
\parinterval (3)结合律:$ (kl)\mathbf a=k(l\mathbf a) $
\begin{itemize}
\item 右分配律:$ k(\mathbf a+\mathbf b)=k\mathbf a+k\mathbf b $
\item 左分配律:$ (k+l)\mathbf a=k\mathbf a+l\mathbf a $
\item 结合律:$ (kl)\mathbf a=k(l\mathbf a) $
\end{itemize}
%--5.2.1.4矩阵乘法和矩阵点乘---------------------
\subsubsection{矩阵乘法和矩阵点乘}\index{Chapter5.2.1.4}
......@@ -272,9 +272,11 @@
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 注意只有当第一个矩阵的列数与第二个矩阵的行数相等时,两个矩阵才可以作矩阵乘法。公式\ref{eqa1.7}展示了矩阵乘法的运算过程,若$\mathbf a=\begin{pmatrix}a_{11} & a_{12}& a_{13}\\a_{21} & a_{22} & a_{23}\end{pmatrix}$\\$\mathbf b=\begin{pmatrix}b_{11} & b_{12}\\b_{21} & b_{22}\\b_{31} & b_{32}\end{pmatrix} $,则有:
%公式--------------------------------------------------------------------
\begin{eqnarray}
\mathbf c = \mathbf a\mathbf b = \begin{pmatrix}
\mathbf c & = & \mathbf a\mathbf b \nonumber \\
& = & \begin{pmatrix}
a_{11}b_{11}+a_{12}b_{21}+a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32}\\
a_{21}b_{11}+a_{22}b_{21}+a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32}
\end{pmatrix}
......@@ -283,16 +285,18 @@
%公式--------------------------------------------------------------------
\parinterval 矩阵乘法满足以下运算规律:
\parinterval (1)结合律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{n\times p} $$ \mathbf c\in R^{p\times q} $,则$ (\mathbf {ab})\mathbf c=\mathbf a(\mathbf {bc}) $
\parinterval (2)左分配律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{m\times n} $$ \mathbf c\in R^{n\times p} $,则$ (\mathbf a+\mathbf b)\mathbf c=\mathbf {ac}+\mathbf {bc} $
\begin{itemize}
\item 结合律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{n\times p} $$ \mathbf c\in R^{p\times q} $,则$ (\mathbf {ab})\mathbf c=\mathbf a(\mathbf {bc}) $
\item 左分配律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{m\times n} $$ \mathbf c\in R^{n\times p} $,则$ (\mathbf a+\mathbf b)\mathbf c=\mathbf {ac}+\mathbf {bc} $
\item 右分配律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{n\times p} $$ \mathbf c\in R^{n\times p} $,则$ \mathbf a(\mathbf b+\mathbf c)=\mathbf {ab}+\mathbf {ac} $
\end{itemize}
\parinterval (3)右分配律:若$ \mathbf a\in R^{m\times n} $$ \mathbf b\in R^{n\times p} $$ \mathbf c\in R^{n\times p} $,则$ \mathbf a(\mathbf b+\mathbf c)\mathbf c=\mathbf {ab}+\mathbf {ac} $
\begin{spacing}{1.4}
\parinterval 可以将线性方程组用矩阵乘法表示,如对于线性方程组$ \begin{cases} 5x_1+2x_2=y_1\\3x_1+x_2=y_2\end{cases} $,可以表示为$ \mathbf {ax}^{\rm T}=\mathbf y^{\rm T}$,其中$ \mathbf a = \begin{pmatrix} 5 & 2\\3 & 1\end{pmatrix} $$ \mathbf x^{\rm T} = \begin{pmatrix} x_1\\x_2\end{pmatrix} $$ \mathbf y^{\rm T} = \begin{pmatrix} y_1\\y_2\end{pmatrix} $
\end{spacing}
\parinterval 矩阵的点乘就是两个形状相同的矩阵各个对应元素相乘,矩阵点乘也被称为按元素乘积(element-wise product)或Hadamard乘积,记为$ \mathbf a \odot \mathbf b$。矩阵点乘的计算过程如下所示:
\parinterval 矩阵的点乘就是两个形状相同的矩阵各个对应元素相乘,矩阵点乘也被称为{\small\bfnew{按元素乘积}}(Element-wise Product)或Hadamard乘积,记为$ \mathbf a \odot \mathbf b$。例如,对于
%公式--------------------------------------------------------------------
\begin{eqnarray}
\mathbf a &=&
......@@ -306,8 +310,13 @@
3 & 1\\
2 & 1
\end{pmatrix}
\\
\mathbf c& = &\mathbf a\odot \mathbf b\;\;=\;\;\begin{pmatrix}
\end{eqnarray}
\parinterval 矩阵点乘的计算如下:
\begin{eqnarray}
\mathbf c & = & \mathbf a\odot \mathbf b \nonumber \\
& = & \begin{pmatrix}
1\times 3 & 0\times1\\
-1\times2 & 3\times1
\end{pmatrix}
......@@ -317,7 +326,7 @@
%--5.2.1.5线性映射---------------------
\subsubsection{线性映射}\index{Chapter5.2.1.5}
\parinterval {\small\sffamily\bfseries{线性映射}}( Linear Mapping)或{\small\sffamily\bfseries{线性变换}}(Linear Transformation)是从一个向量空间V到另一个向量空间W的映射函数$ f:v\rightarrow w$,且该映射函数保持加法运算和数量乘法运算,即对于空间V中任何两个向量$ \mathbf u $$ \mathbf v $以及任何标量$ c $
\parinterval {\small\sffamily\bfseries{线性映射}}( Linear Mapping)或{\small\sffamily\bfseries{线性变换}}(Linear Transformation)是从一个向量空间V到另一个向量空间W的映射函数$ f:v\rightarrow w$,且该映射函数保持加法运算和数量乘法运算,即对于空间V中任何两个向量$ \mathbf u $$ \mathbf v $以及任何标量$ c $,有
%公式--------------------------------------------------------------------
\begin{eqnarray}
f(\mathbf u+\mathbf v)&=&f(\mathbf u)+f(\mathbf v)\label{eqa1.9}\\
......@@ -325,9 +334,9 @@ f(c\mathbf v)&=&cf(\mathbf v)
\label{eqa1.10}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 利用矩阵$ \mathbf a\in R^{m\times n} $,可以实现两个有限维欧氏空间的映射函数$f:R^n\rightarrow R^m$。例如$ n $维列向量$ \mathbf x $$ m\times n $的矩阵$ \mathbf a $,向量$ \mathbf x $左乘矩阵$ \mathbf a $,可将向量$ \mathbf x $映射为$ m $列向量,如下
\parinterval 利用矩阵$ \mathbf a\in R^{m\times n} $,可以实现两个有限维欧氏空间的映射函数$f:R^n\rightarrow R^m$。例如$ n $维列向量$ \mathbf x $$ m\times n $的矩阵$ \mathbf a $,向量$ \mathbf x $左乘矩阵$ \mathbf a $,可将向量$ \mathbf x $映射为$ m $列向量,对于
\begin{eqnarray}
\mathbf x&=&{\begin{pmatrix} x_1 & x_2 & \dots & x_n \end{pmatrix}}^{\rm T}
\mathbf x^{\textrm{T}} & = & {\begin{pmatrix} x_1, & x_2, & \dots &, x_n \end{pmatrix}}^{\rm T}
\label{eqa1.11}
\end{eqnarray}
\begin{eqnarray}
......@@ -341,8 +350,10 @@ f(c\mathbf v)&=&cf(\mathbf v)
\label{eqa1.12}
\end{eqnarray}
\parinterval 可以得到:
\begin{eqnarray}
\mathbf y& = &\mathbf a\mathbf x \nonumber \\
\mathbf y^{\textrm{T}}& = &\mathbf a\mathbf x^{\textrm{T}} \nonumber \\
& = &
\begin{pmatrix}
a_{11}x_{1}+a_{12}x_{2}+\dots+a_{1n}x_{n}\\
......@@ -353,16 +364,19 @@ f(c\mathbf v)&=&cf(\mathbf v)
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 上例中矩阵$ \mathbf a $定义了一个从$ R^n $$ R^m $的线性映射:向量$ \mathbf x\in R^n $$ \mathbf y\in R^m $别为两个空间中的列向量,即大小为$ n\times 1 $$ m\times 1 $的矩阵。
\parinterval 上例中矩阵$ \mathbf a $定义了一个从$ R^n $$ R^m $的线性映射:向量$ \mathbf x^{\textrm{T}}\in R^n $$ \mathbf y^{\textrm{T}}\in R^m $别为两个空间中的列向量,即大小为$ n\times 1 $$ m\times 1 $ 的矩阵。
%--5.2.1.6范数---------------------
\subsubsection{范数}\index{Chapter5.2.1.6}
\parinterval 工程领域,经常会使用被称为{\small\bfnew{范数}}(Norm)的函数衡量向量大小,范数为向量空间内的所有向量赋予非零的正长度或大小。对于一个n维向量$ \mathbf x $,一个常见的范数函数为$ l_p $ 范数,通常表示为$ {\Vert{\mathbf x}\Vert}_p $ ,其中$p\geqslant 0$,是一个标量形式的参数。常用的$ p $的取值有$ 1 $$ 2 $$ \infty $等。范数的计算公式为:
\parinterval 工程领域,经常会使用被称为{\small\bfnew{范数}}(Norm)的函数衡量向量大小,范数为向量空间内的所有向量赋予非零的正长度或大小。对于一个$n$维向量$ \mathbf x $,一个常见的范数函数为$ l_p $ 范数,通常表示为$ {\Vert{\mathbf x}\Vert}_p $ ,其中$p\ge 0$,是一个标量形式的参数。常用的$ p $的取值有$ 1 $$ 2 $$ \infty $等。范数的计算公式为:
%公式--------------------------------------------------------------------
\begin{eqnarray}
l_p(\mathbf x)&=&{\Vert{\mathbf x}\Vert}_p\;\;=\;\;{\left (\sum_{i=1}^{n}{{\vert x_{i}\vert}^p}\right )}^{\frac{1}{p}}
l_p(\mathbf x) & = & {\Vert{\mathbf x}\Vert}_p \nonumber \\
& = & {\left (\sum_{i=1}^{n}{{\vert x_{i}\vert}^p}\right )}^{\frac{1}{p}}
\label{eqa1.14}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval $ l_1 $范数为向量的各个元素的绝对值之和:
%公式--------------------------------------------------------------------
......@@ -379,7 +393,7 @@ l_p(\mathbf x)&=&{\Vert{\mathbf x}\Vert}_p\;\;=\;\;{\left (\sum_{i=1}^{n}{{\vert
\label{eqa1.16}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval $ l_2 $范数被称为欧几里得范数(Euclidean norm)。从几何角度,向量也可以表示为从原点出发的一个带箭头的有向线段,其$ l_2 $范数为线段的长度,也常被称为向量的模。$ l_2 $范数在机器学习中出现地十分频繁,向量$ \mathbf x $$ l_2 $范数经常简化为$ \Vert{\mathbf x}\Vert $,可以简单地通过点积$ {\mathbf x}^{\rm T}\mathbf x $计算。
\parinterval $ l_2 $范数被称为{\small\bfnew{欧几里得范数}}(Euclidean Norm)。从几何角度,向量也可以表示为从原点出发的一个带箭头的有向线段,其$ l_2 $范数为线段的长度,也常被称为向量的模。$ l_2 $ 范数在机器学习中非常常用,向量$ \mathbf x $$ l_2 $范数经常简化为$ \Vert{\mathbf x}\Vert $,可以简单地通过点积$ {\mathbf x}^{\rm T}\mathbf x $计算。
\parinterval $ l_{\infty} $范数为向量的各个元素的最大绝对值:
%公式--------------------------------------------------------------------
......@@ -388,15 +402,15 @@ l_p(\mathbf x)&=&{\Vert{\mathbf x}\Vert}_p\;\;=\;\;{\left (\sum_{i=1}^{n}{{\vert
\label{eqa1.17}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 范数是将向量映射到非负值的函数,其作用是衡量向量$ \mathbf x $到坐标原点的距离。更严格的说,范数并不拘于$ l_p $范数,任何一个同时满足下列性质的函数都可以作为范数:
\parinterval 广义上讲,范数是将向量映射到非负值的函数,其作用是衡量向量$ \mathbf x $到坐标原点的距离。更严格的说,范数并不拘于$ l_p $范数,任何一个同时满足下列性质的函数都可以作为范数:
\parinterval (1)若$ f(x)=0 $,则$ x=0 $
\parinterval (2)三角不等式:$ f(x+y)\leqslant f(x)+f(y) $
\parinterval (3)任意实数$ \alpha $$ f(\alpha x)=\vert \alpha \vert f(x) $
\begin{itemize}
\item$ f(x)=0 $,则$ x=0 $
\item 三角不等式:$ f(x+y)\leqslant f(x)+f(y) $
\item 任意实数$ \alpha $$ f(\alpha x)=\vert \alpha \vert f(x) $
\end{itemize}
\parinterval 在深度学习中,有时候希望衡量矩阵的大小,最常见的做法是使用 {\small\bfnew{Frobenius 范数}}(Frobenius Norm),其类似于向量的$ l_2 $范数,计算方式为:
\parinterval 在深度学习中,有时候希望衡量矩阵的大小,这时可以考虑使用 {\small\bfnew{Frobenius 范数}}(Frobenius Norm)。计算方式为:
%公式--------------------------------------------------------------------
\begin{eqnarray}
{\Vert{\mathbf A}\Vert}_F&=&\sqrt{\sum_{i,j} A_{i,j}^2}
......@@ -417,7 +431,7 @@ l_p(\mathbf x)&=&{\Vert{\mathbf x}\Vert}_p\;\;=\;\;{\left (\sum_{i=1}^{n}{{\vert
\end{figure}
%-------------------------------------------
\parinterval 同样,人工神经元是人工神经网络的基本单元,在人们的想象中,人工神经元应该与生物神经元类似,实际在形态上,人工神经元和生物神经元还是有一定差别的。如图\ref{fig:artificial-neuron}是一个典型的人工神经元,其本质是一个形似$ y=f(\mathbf x\cdot \mathbf w+b) $的函数。显而易见,一个神经元主要由$ \mathbf x $$ \mathbf w $$ b $$ f $四个部分构成。其中$ \mathbf x $是一个形如$ (x_0,x_1,\dots,x_n) $的实数向量,在一个神经元中担任``输入''的角色。$ \mathbf w $是一个权重矩阵,其中的每一个元素都对应着一个输入和一个输出,代表着``某输入对某输出的贡献程度'',通常也被理解为神经元连接的{\small\sffamily\bfseries{权重}}(weight)。$ b $被称作偏置,是一个实数。$ f $叫做激活函数,其本质是一个非线性函数。可见,一个人工神经元的功能是将输入向量与权重矩阵右乘(做内积)后,加上偏置量,经过一个非线性激活函数得到一个标量结果。
\parinterval 同样,人工神经元是人工神经网络的基本单元。在人们的想象中,人工神经元应该与生物神经元类似。但事实上,二者在形态上是有明显差别的。如图\ref{fig:artificial-neuron} 是一个典型的人工神经元,其本质是一个形似$ y=f(\mathbf x\cdot \mathbf w+b) $的函数。显而易见,一个神经元主要由$ \mathbf x $$ \mathbf w $$ b $$ f $四个部分构成。其中$ \mathbf x $是一个形如$ (x_0,x_1,\dots,x_n) $的实数向量,在一个神经元中担任``输入''的角色。$ \mathbf w $是一个权重矩阵,其中的每一个元素都对应着一个输入和一个输出,代表着``某输入对某输出的贡献程度'',通常也被理解为神经元连接的{\small\sffamily\bfseries{权重}}(weight)。$ b $被称作偏置,是一个实数。$ f $被称作激活函数,其本质是一个非线性函数。可见,一个人工神经元的功能是将输入向量与权重矩阵右乘(做内积)后,加上偏置量,经过一个非线性激活函数得到一个标量结果。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -429,9 +443,9 @@ l_p(\mathbf x)&=&{\Vert{\mathbf x}\Vert}_p\;\;=\;\;{\left (\sum_{i=1}^{n}{{\vert
%-------------------------------------------
%--5.2.2.1感知机\ \dash \ 最简单的人工神经元模型---------------------
\subsubsection{(一)感知机\ \dash \ 最简单的人工神经元模型}\index{Chapter5.2.2.1}
\subsubsection{感知机\ \dash \ 最简单的人工神经元模型}\index{Chapter5.2.2.1}
\parinterval 感知机是人工神经元的一种实例,在上世纪50-60年代被提出后,对神经网络研究产生了深远的影响。感知机模型如图\ref {fig:perceptron-mode}所示,其输入是一个n维二值向量$ \mathbf x=(x_0,x_1,\dots,x_n) $,其中$ x_i=0 $$ 1 $。权重$ \mathbf w=(w_0,w_1,\dots,w_n) $,每个输入变量对应一个权重$ w_i $(实数)。偏置$ b $是一个实数变量($ -\sigma $)。输出也是一个二值结果,即$ y=0 $$ 1 $$ y $值的判定由输入的加权和是否大于(或小于)一个阈值$ \sigma $决定
\parinterval 感知机是人工神经元的一种实例,在上世纪50-60年代被提出后,对神经网络研究产生了深远的影响。感知机模型如图\ref {fig:perceptron-mode}所示,其输入是一个$n$维二值向量$ \mathbf x=(x_0,x_1,\dots,x_n) $,其中$ x_i=0 $$ 1 $。权重$ \mathbf w=(w_0,w_1,\dots,w_n) $,每个输入变量对应一个权重$ w_i $(实数)。偏置$ b $是一个实数变量($ -\sigma $)。输出也是一个二值结果,即$ y=0 $$ 1 $$ y $值的判定由输入的加权和是否大于(或小于)一个阈值$ \sigma $决定(图\ref{fig:perceptron-mode}
%公式--------------------------------------------------------------------
\begin{eqnarray}
y=\begin{cases} 0 & \sum_{i}{x_i\cdot w_i}-\sigma <0\\1 & \sum_{i}{x_i\cdot w_i}-\sigma \geqslant 0\end{cases}
......@@ -451,11 +465,11 @@ y=\begin{cases} 0 & \sum_{i}{x_i\cdot w_i}-\sigma <0\\1 & \sum_{i}{x_i\cdot w_i}
\parinterval 感知机可以做一些简单的决策。举一个非常简单的例子,有一场音乐会,你正在纠结是否去参加,有三个因素会影响你的决定:
\parinterval $ x_0 $:剧场是否离你足够近(是,则$ x_0=1 $;否则$ x_0=0 $
\parinterval $ x_1 $:票价是否低于300元(是,则$ x_1=1 $;否则$ x_1=0 $
\parinterval $ x_2 $:女朋友是否喜欢音乐会(是,则$ x_2=1 $;否则$ x_2=0 $
\begin{itemize}
\item $ x_0 $:剧场是否离你足够近(是,则$ x_0=1 $;否则$ x_0=0 $);
\item $ x_1 $:票价是否低于300元(是,则$ x_1=1 $;否则$ x_1=0 $);
\item $ x_2 $:女朋友是否喜欢音乐会(是,则$ x_2=1 $;否则$ x_2=0 $)。
\end{itemize}
\parinterval 在这种情况下应该如何做出决定呢?比如,女朋友很希望和你一起去看音乐会,但是剧场很远而且票价500元,如果这些因素对你都是同等重要的(即$ w_0=w_1=w_2 $,假设这三个权重都设置为1)那么会得到一个综合得分:
%公式--------------------------------------------------------------------
......@@ -465,7 +479,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\label{eqa1.20}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 如果你不是十分纠结的人,能够接受不完美的事情,你可能会把$ \sigma $设置为1,于是$ \sum{w_i\cdot x_i}-\sigma \geqslant 0 $,那么你会去音乐会。可以看出,上面的例子的本质就是一个如图\ref{fig:perceptron-to-predict-1}的感知机:
\parinterval 如果你不是十分纠结的人,能够接受不完美的事情,你可能会把$ \sigma $设置为1,于是$ \sum{w_i\cdot x_i}-\sigma \ge 0 $,那么你会去音乐会。可以看出,上面的例子的本质就是一个如图\ref{fig:perceptron-to-predict-1}的感知机:
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -476,11 +490,9 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\end{figure}
%-------------------------------------------
%--5.2.2.2神经元内部权重---------------------
\subsubsection{(二)神经元内部权重}\index{Chapter5.2.2.2}
\subsubsection{神经元内部权重}\index{Chapter5.2.2.2}
\parinterval 上面例子中的决策过程本质是一个感知机,其中的连接权重代表着每个输入因素对最终输出结果的重要程度,为了得到令人满意的决策,需要不断调整权重。
\parinterval 在上面的例子中,如果你是守财奴,则会对票价看得更重一些,这样你会用不均匀的权重计算每个因素的影响,比如:$ w_0=0.5 $$ w_1=2 $$ w_2=0.5 $,此时感知机模型如图\ref{fig:perceptron-to-predict-2}所示。在这种情况下,女友很希望和你一起去看音乐会,但是剧场很远而且票价有500元,会导致你不去看音乐会,因为
\parinterval 在上面的例子中,连接权重代表着每个输入因素对最终输出结果的重要程度,为了得到令人满意的决策,需要不断调整权重。如果你是守财奴,则会对票价看得更重一些,这样你会用不均匀的权重计算每个因素的影响,比如:$ w_0=0.5 $$ w_1=2 $$ w_2=0.5 $,此时感知机模型如图\ref{fig:perceptron-to-predict-2}所示。在这种情况下,女友很希望和你一起去看音乐会,但是剧场很远而且票价有500元,会导致你不去看音乐会,因为
%公式--------------------------------------------------------------------
\begin{eqnarray}
\sum_{i}{x_i\cdot w_i} & = & 0\cdot 0.5+0\cdot 2+1\cdot 0.5 \nonumber \\
......@@ -500,8 +512,9 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
%-------------------------------------------
\parinterval 当然,结果是女友对这个结果非常不满意,让你跪键盘上反思一下自己。
%--5.2.2.3神经元的输入\ \dash \ 离散 vs 连续---------------------
\subsubsection{(三)神经元的输入\ \dash \ 离散 vs 连续}\index{Chapter5.2.2.3}
\subsubsection{神经元的输入\ \dash \ 离散 vs 连续}\index{Chapter5.2.2.3}
\parinterval 在遭受了女友一万点伤害之后,你意识到决策考虑的因素(即输入)不应该只是非0即1,而应该把``程度''考虑进来,于是你改变了三个输入的形式:
......@@ -533,7 +546,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
%公式--------------------------------------------------------------------
\parinterval 虽然剧场很远,价格有点贵,但是女友很满意,你还是很高兴。
%--5.2.2.4神经元内部的参数学习---------------------
\subsubsection{(四)神经元内部的参数学习}\index{Chapter5.2.2.4}
\subsubsection{神经元内部的参数学习}\index{Chapter5.2.2.4}
\parinterval 一次成功的音乐会之后,你似乎掌握了一个真理:其他什么都不重要,女友的喜好最重要,所以你又将决策模型的权重做出了调整:最简单的方式就是$ w_0=w_1=0 $,同时令$ w_2>0 $,相当于只考虑$ x_2 $的影响而忽略其他因素,于是你得到了如图\ref {fig:perceptron-to-predict-3}所示的决策模型:
%----------------------------------------------
......@@ -554,23 +567,32 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\vspace{0.5em}
\begin{itemize}
\item 对问题建模即定义输入$ \{x_i\} $的形式。
\item 对问题建模即定义输入$ \{x_i\} $的形式。
\vspace{0.5em}
\item 设计有效的决策模型即定义$ y $
\item 设计有效的决策模型即定义$ y $
\vspace{0.5em}
\item 决定模型所涉及的参数(如权重$ \{w_i\} $)的最优值。
\end{itemize}
\vspace{0.5em}
\parinterval 上面的例子对这三个问题都简要的做出了回答。下面的内容将继续对它们进行详细阐述。
%--5.2.3多层神经网络---------------------
\subsection{多层神经网络}\index{Chapter5.2.3}
\parinterval 感知机也被称作一种最简单的单层神经网络。一个非常自然的问题是:能否把多个这样的网络叠加在一起,获得建模更复杂问题的能力?如果可以,那么在多层神经网络的每一层,神经元之间是怎么组织、工作的呢?单层网络又是通过什么方式构造成多层的呢?
\parinterval 感知机一种最简单的单层神经网络。一个非常自然的问题是:能否把多个这样的网络叠加在一起,获得建模更复杂问题的能力?如果可以,那么在多层神经网络的每一层,神经元之间是怎么组织、工作的呢?单层网络又是通过什么方式构造成多层的呢?
%--5.2.3.1线性变换和激活函数---------------------
\subsubsection{线性变换和激活函数}\index{Chapter5.2.3.1}
\parinterval 为了建立多层神经网络,首先需要把前面提到的简单的神经元进行扩展,把多个神经元组成一``层''神经元。比如,很多实际问题需要同时有多个输出,这时可以把多个相同的神经元并列起来,每个神经元都会有一个单独的输出,这就构成一``层'',形成了单层神经网络。单层神经网络中的每一个神经元都对应着一组权重和一个输出,可以把单层神经网络中的不同输出看作一个事物不同角度的描述。举个简单的例子,预报天气时,往往需要预测温度、湿度和风力,这就意味着如果使用单层神经网络进行预测,需要设置3个神经元。如图\ref{fig:corresponence-between-matrix-element-and-output},权重矩阵$ \mathbf w=\begin{pmatrix} w_{00} & w_{01} & w_{02}\\ w_{10} & w_{11} & w_{12}\end{pmatrix} $中第一列元素$ \begin{pmatrix} w_{00}\\ w_{10}\end{pmatrix} $是输入相对第一个输出$ y_0 $ 的权重,参数向量$ \mathbf b=(b_0,b_1,b_2) $的第一个元素$ b_0 $是对应于第一个输出$ y_0 $的偏置量;类似的,可以得到$ y_1 $$ y_2 $。预测天气的单层模型如图\ref{fig:single-layer-of-neural-network-for-weather-prediction}所示(在本例中,假设输入$ \mathbf x=(x_0,x_1) $)。
\parinterval 为了建立多层神经网络,首先需要把前面提到的简单的神经元进行扩展,把多个神经元组成一``层''神经元。比如,很多实际问题需要同时有多个输出,这时可以把多个相同的神经元并列起来,每个神经元都会有一个单独的输出,这就构成一``层'',形成了单层神经网络。单层神经网络中的每一个神经元都对应着一组权重和一个输出,可以把单层神经网络中的不同输出看作一个事物不同角度的描述。
举个简单的例子,预报天气时,往往需要预测温度、湿度和风力,这就意味着如果使用单层神经网络进行预测,需要设置3个神经元。如图\ref{fig:corresponence-between-matrix-element-and-output},权重矩阵为:
\begin{equation}
\mathbf w=\begin{pmatrix} w_{00} & w_{01} & w_{02}\\ w_{10} & w_{11} & w_{12}\end{pmatrix}
\end{equation}
\noindent 它的第一列元素$ \begin{pmatrix} w_{00}\\ w_{10}\end{pmatrix} $是输入相对第一个输出$ y_0 $ 的权重,参数向量$ \mathbf b=(b_0,b_1,b_2) $的第一个元素$ b_0 $是对应于第一个输出$ y_0 $ 的偏置量;类似的,可以得到$ y_1 $$ y_2 $。预测天气的单层模型如图\ref{fig:single-layer-of-neural-network-for-weather-prediction}所示(在本例中,假设输入$ \mathbf x=(x_0,x_1) $)。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -591,15 +613,17 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\end{figure}
%-------------------------------------------
\parinterval 在神经网络中,对于输入向量$ \mathbf x\in R^m $,一层神经网络首先将其经过线性变换映射到$ R^n $,再经过激活函数变成$ \mathbf y\in R^n $。还是上面天气预测的例子,每个神经元获得相同的输入,权重矩阵$ \mathbf w $是一个$ 2\times 3 $矩阵,矩阵中每个元素$ w_{ij} $代表第$ j $个神经元中$ x_{i} $对应的权重值,假设编号为0的神经元负责预测温度,则$ w_{0j} $含义为预测温度时,输入$ x_{i} $对其影响程度。此外所有神经元的偏置$ b_{0} $$ b_{1} $$ b_{2} $组成了最终的偏置向量$ \mathbf b $
\parinterval 在该例中则有,权重矩阵$ \mathbf w=\begin{pmatrix} w_{00} & w_{01} & w_{02}\\ w_{10} & w_{11} & w_{12}\end{pmatrix} $,偏置向量$ \mathbf b=(b_0,b_1,b_2) $
\parinterval 在神经网络中,对于输入向量$ \mathbf x\in R^m $,一层神经网络首先将其经过线性变换映射到$ R^n $,再经过激活函数变成$ \mathbf y\in R^n $。还是上面天气预测的例子,每个神经元获得相同的输入,权重矩阵$ \mathbf w $是一个$ 2\times 3 $矩阵,矩阵中每个元素$ w_{ij} $代表第$ j $个神经元中$ x_{i} $对应的权重值,假设编号为0的神经元负责预测温度,则$ w_{0j} $含义为预测温度时,输入$ x_{i} $对其影响程度。此外所有神经元的偏置$ b_{0} $$ b_{1} $$ b_{2} $组成了最终的偏置向量$ \mathbf b $。在该例中则有,权重矩阵$ \mathbf w=\begin{pmatrix} w_{00} & w_{01} & w_{02}\\ w_{10} & w_{11} & w_{12}\end{pmatrix} $,偏置向量$ \mathbf b=(b_0,b_1,b_2) $
\parinterval 那么,线性变换的本质是什么?
\begin{itemize}
\item 从代数角度看,对于线性空间$ \rm V $,任意$ a,b\in {\rm V} $和数域中的任意$ \alpha $,线性变换$ T(\cdot) $需满足:$ T(a+b)=T(a)+T(b) $$ T(\alpha a)=\alpha T(a) $
\item 从几何角度上看,公式中的$ \mathbf x\cdot \mathbf w+\mathbf b $$ \mathbf x $右乘$ \mathbf w $相当于对$ \mathbf x $进行旋转变换,如图\ref{fig:rotation}所示,对三个点$ (0,0) $$ (0,1) $$ (1,0) $及其围成的矩形区域右乘$ \mathbf w=\begin{pmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\end{pmatrix} $\\后,矩形区域由第一象限旋转90度到了第四象限。
\item 从代数角度看,对于线性空间$ \rm V $,任意$ a,b\in {\rm V} $和数域中的任意$ \alpha $,线性变换$ T(\cdot) $需满足:$ T(a+b)=T(a)+T(b) $,且$ T(\alpha a)=\alpha T(a) $
\item 从几何角度上看,公式中的$ \mathbf x\cdot \mathbf w+\mathbf b $$ \mathbf x $右乘$ \mathbf w $相当于对$ \mathbf x $进行旋转变换,如图\ref{fig:rotation}所示,对三个点$ (0,0) $$ (0,1) $$ (1,0) $及其围成的矩形区域右乘如下矩阵:
\begin{equation}
\mathbf w=\begin{pmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\end{pmatrix}
\end{equation}
这样,矩形区域由第一象限旋转90度到了第四象限。
\end{itemize}
%----------------------------------------------
......@@ -623,7 +647,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\end{figure}
%-------------------------------------------
\parinterval 也就是说,线性变换提供了对输入数据进行空间中旋转、平移的能力。当然,线性变换也适用于更加复杂的情况,这也为神经网络提供了拟合不同函数的能力。比如,可以利用线性变换将三维图形投影到二维平面上,或者将二维平面上的图形映射到三维平面。如图\ref{fig:linear-transformation},通过一个简单的线性变换,将三维图形投影到二维平面上。
\parinterval 也就是说,线性变换提供了对输入数据进行空间中旋转、平移的能力。当然,线性变换也适用于更加复杂的情况,这也为神经网络提供了拟合不同函数的能力。比如,可以利用线性变换将三维图形投影到二维平面上,或者将二维平面上的图形映射到三维平面。如图\ref{fig:linear-transformation},通过一个简单的线性变换,可以将三维图形投影到二维平面上。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -634,9 +658,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\end{figure}
%-------------------------------------------
\parinterval 那激活函数又是什么?神经元在接收到经过线性变换的结果后,通过激活函数的处理,得到最终的输出$ \mathbf y $。激活函数的目的是解决实际问题中的非线性变换,线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。 特别是在实际问题中,很多现象都无法用简单的线性关系描述,这时激活函数的非线性就为描述更加复杂的问题提供了工具。
\parinterval 神经网络方法的本质是拟合输入与输出的函数关系,正是激活函数赋予了神经网络拟合任何函数的能力。常见的非线性函数有Sigmoid、Relu、Tanh等。如图\ref{fig:activation}列举了几种激活函数的函数曲线。
\parinterval 那激活函数又是什么?神经元在接收到经过线性变换的结果后,通过激活函数的处理,得到最终的输出$ \mathbf y $。激活函数的目的是解决实际问题中的非线性变换,线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。 特别是在实际问题中,很多现象都无法用简单的线性关系描述,这时激活函数的非线性就为描述更加复杂的问题提供了工具。常见的非线性函数有Sigmoid、Relu、Tanh等。如图\ref{fig:activation}列举了几种激活函数的形式。
%----------------------------------------------
% 图
\begin{figure}\centering
......@@ -688,7 +710,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
%--5.2.3.2单层神经网络->多层神经网络---------------------
\subsubsection{单层神经网络$\rightarrow$多层神经网络}\index{Chapter5.2.3.2}
\parinterval 单层神经网络由线性变换和激活函数两部分构成,但在实际问题中,单层网络并不足以拟合所有函数关系,因此很自然的想到将单层网络扩展到多层神经网络即深层神经网络。将一层神经网络的最终输出向量作为另一层神经网络的输入向量,通过这种方式可以将多层神经网络连接在一起,如图\ref{fig:more-layers}所示.
\parinterval 单层神经网络由线性变换和激活函数两部分构成,但在实际问题中,单层网络并不能很好的拟合复杂函数。因此很自然的想到将单层网络扩展到多层神经网络即深层神经网络。将一层神经网络的最终输出向量作为另一层神经网络的输入向量,通过这种方式可以将多层神经网络连接在一起,如图\ref{fig:more-layers}所示。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -713,11 +735,11 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
%--5.2.4函数拟合能力---------------------
\subsection{函数拟合能力}\index{Chapter5.2.4}
\parinterval 神经网络方法本质上就是在构造一个函数,将输入$ \mathbf x $转化为输出$ \mathbf y $。神经网络方法之所以受到青睐一方面是由于它提供了端到端学习的模式,另一方面是由于它强大的函数拟合能力。理论上说,神经网络可以拟合任何形状的函数。下面就来看一下为什么神经网络会有这样的能力。
\parinterval 神经网络方法之所以受到青睐一方面是由于它提供了端到端学习的模式,另一方面是由于它强大的函数拟合能力。理论上说,神经网络可以拟合任何形状的函数。下面就来看一下为什么神经网络会有这样的能力。
\parinterval 众所周知,单层神经网络无法解决线性不可分问题,比如经典的异或问题。但是具有一个隐藏层的两层神经网络在理论上就可以拟合所有的函数了。有些神奇?接下来我们分析一下为什么仅仅是多了一层,神经网络就能变得如此强大。在此之前,需要明确的一点是,``拟合''是把平面上一系列的点,用一条光滑的曲线连接起来,并用函数来表示这条拟合的曲线。在用神经网络解决问题时,可以通过拟合训练数据中的``数据点''来获得输入与输出之间的函数关系,并利用其对未知数据做出判断。可以假设输入与输出之间存在一种函数关系,而神经网络的``拟合''能力并不是可以完全准确的计算某输入对应的原函数输出值,而是尽可能地逼近原函数输出值,与原函数输出值越逼近,则意味着拟合得越优秀。
\parinterval 众所周知,单层神经网络无法解决线性不可分问题,比如经典的异或问题。但是具有一个隐藏层的两层神经网络在理论上就可以拟合所有的函数了。接下来我们分析一下为什么仅仅是多了一层,神经网络就能变得如此强大。在此之前,需要明确的一点是,``拟合''是把平面上一系列的点,用一条光滑的曲线连接起来,并用函数来表示这条拟合的曲线。在用神经网络解决问题时,可以通过拟合训练数据中的``数据点''来获得输入与输出之间的函数关系,并利用其对未知数据做出判断。可以假设输入与输出之间存在一种函数关系,而神经网络的``拟合''能力要是尽可能地逼近原函数输出值,与原函数输出值越逼近,则意味着拟合得越优秀。
\parinterval 如图\ref{fig:two-layer-neural-network}是一个以Sigmoid作为隐藏层激活函数的两层神经网络。通过调整参数$ \mathbf w=(w_1,w_2) $$ \mathbf b=(b_1,b_2) $$ \mathbf w=(w’_0,w’_1) $ 的值,可以不断地改变目标函数的形状。
\parinterval 如图\ref{fig:two-layer-neural-network}是一个以Sigmoid作为隐藏层激活函数的两层神经网络。通过调整参数$ \mathbf w=(w_1,w_2) $$ \mathbf b=(b_1,b_2) $$ \mathbf w^{'}=(w'_{0},w'_{1}) $ 的值,可以不断地改变目标函数的形状。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -808,12 +830,13 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\vspace{0.5em}
\parinterval 在本书后面的内容中还会看到,深层网络在机器翻译中可以带来明显的性能提升。
%--5.3神经网络的张量实现-----------------------------------------
\section{神经网络的张量实现}\index{Chapter5.3}
\parinterval 在神经网络内部,输入经过若干次变换,最终得到输出的结果。这个过程类似于一种逐层的数据``流动''。不禁会产生这样的疑问:在神经网络中,数据是以哪种形式``流动''的?如何去编程实现这种数据``流动''呢?
\parinterval 在神经网络内部,输入经过若干次变换,最终得到输出的结果。这个过程类似于一种逐层的数据``流动''。不禁会产生这样的疑问:在神经网络中,数据是以哪种形式``流动''的?如何去编程实现这种数据``流动''呢?
\parinterval 为了解决上面的问题,本节将介绍人工神经网络的更加通用的描述形式 \ \dash \ 张量计算。随后也会看到,基于张量这个数学工具,可以方便的用深度学习框架搭建神经网络。
\parinterval 为了解决上面的问题,本节将介绍人工神经网络更加通用的描述形式 \ \dash \ 张量计算。随后也会看到,基于张量用数学工具,可以方便的搭建神经网络。
%--5.3.1 张量及其计算---------------------
\subsection{ 张量及其计算}\index{Chapter5.3.1}
......@@ -829,9 +852,9 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\label{}
\end{eqnarray}
%公式--------------------------------------------------------------------
\parinterval 简单来说,张量可以为描述数据提供更多方便,是一种通用的工具。比如,输入的量有三个维度在变化,用矩阵不容易描述,但是用张量却很容易。
\parinterval 简单来说,是一种通用的工具,用于描述由多个数据构成的量。比如,输入的量有三个维度在变化,用矩阵不容易描述,但是用张量却很容易。
\parinterval 从计算机实现的角度来看,现在所有深度学习框架都把张量定义为``多维数组''。张量有一个非常重要的属性\ \dash \ 阶(rank)。可以将多维数组中``维''的属性与张量的``阶''的属性作类比,这两个属性都表示多维数组(张量)有多少个独立的方向。例如,3是一个标量(scalar),相当于一个0维数组或0阶张量;$ {(\begin{array}{cccc} 2 & -3 & 0.8 & 0.2\end{array})}^{\rm T} $是一个向量(vector),相当于一个1维数组或1阶张量;$ \begin{pmatrix} -1 & 3 & 7\\ 0.2 & 2 & 9\end{pmatrix} $是一个矩阵(matrix),相当于一个2维数组或2阶张量;如图\ref{fig:tensor-sample},这是一个3维数组或3阶张量,其中,每个$4 \times 4$的方形代表一个2阶张量,这样的方形有4个,最终形成3阶张量。
\parinterval 从计算机实现的角度来看,现在所有深度学习框架都把张量定义为``多维数组''。张量有一个非常重要的属性\ \dash \ {\small\bfnew{}}(Rank)。可以将多维数组中``维''的属性与张量的``阶''的属性作类比,这两个属性都表示多维数组(张量)有多少个独立的方向。例如,3是一个标量(Scalar),相当于一个0维数组或0阶张量;$ {(\begin{array}{cccc} 2 & -3 & 0.8 & 0.2\end{array})}^{\rm T} $ 是一个向量(Vector),相当于一个1维数组或1阶张量;$ \begin{pmatrix} -1 & 3 & 7\\ 0.2 & 2 & 9\end{pmatrix} $是一个矩阵(Matrix),相当于一个2维数组或2阶张量;如图\ref{fig:tensor-sample},这是一个3 维数组或3阶张量,其中,每个$4 \times 4$的方形代表一个2阶张量,这样的方形有4个,最终形成3阶张量。
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -846,9 +869,9 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\parinterval 张量的严格定义是利用线性映射来描述的。与矢量相类似,定义由若干坐标系改变时满足一定坐标转化关系的有序数组成的集合为张量。从几何角度讲,它是一个真正的几何量,也就是说,它是不随参照系的坐标变换而变化的,是若干向量和协向量通过张量乘法定义的量。
\parinterval 不过,更广泛接受的定义是:张量是多重线性函数,是定义在一些向量空间和笛卡尔积上的多重线性映射。张量的多重线性表现在,对于每一个输入函数都是线性的。比如,张量$ \mathbf T(v_0,v_1,\dots,v_r) $,其输入是$r$个向量$ \{v_0,v_1,\dots,v_r\} $,对于张量$ \mathbf T $的任意一个$ v_i $,都有$ \mathbf T(v_0,\dots,v_i+c\cdot u,\dots,v_r)=\mathbf T(v_0,\dots,v_i,\dots,v_r)+c\cdot{\mathbf T(v_0,\dots,u,\dots,v_r)} $其中,$ c $为任意实数。这个性质非常重要,根据这个性质可以推导出张量的其他定义。
\parinterval 不过,更广泛接受的定义是:张量是多重线性函数,是定义在一些向量空间和笛卡尔积上的多重线性映射。张量的多重线性表现在,对于每一个输入函数都是线性的。比如,张量$ \mathbf T(v_0,v_1,\dots,v_r) $,其输入是$r$个向量$ \{v_0,v_1,\dots,v_r\} $,对于张量$ \mathbf T $的任意一个$ v_i $,都有$ \mathbf T(v_0,\dots,v_i+c\cdot u,\dots,v_r)=\mathbf T(v_0,\dots,v_i,\dots,v_r)+c\cdot{\mathbf T(v_0,\dots,u,\dots,v_r)} $其中,$ c $为任意实数。这个性质非常重要,根据这个性质可以推导出张量的其他定义。
\parinterval 从我们的物理世界看,如果一个物理量在物体的某个位置上只是一个单值,那么它是一个标量,例如密度;如果一个物理量在同一个位置、从多个方向上看,有不同的值,那么这个物理量就是一个的张量。比如物理学中常用的应力的描述就是一个典型的张量。举一个简单的例子:$ \mathbf T(\mathbf v,\mathbf u) $是一个三维空间(x,y,z)上的2阶张量,其中$ \mathbf v $$ \mathbf u $是两个向量,如图\ref{fig:tensor}所示,向量$ \mathbf v $在某个两两垂直的三维坐标系中可以表示为$ {(\begin{array}{ccc} a & b & c\end{array})}^{\rm T} $,同理向量$ \mathbf u $在某个两两垂直的三维坐标系中可以表示为$ {(\begin{array}{ccc} a' & b' & c' \end{array})}^{\rm T} $。但在三维空间(x,y,z)中,向量$ \mathbf v $和向量$ \mathbf u $分别被表示为$ {(\begin{array}{ccc} v_x & v_y & v_z\end{array})}^{\rm T} $$ {(\begin{array}{ccc} u_x & u_y & u_z\end{array})}^{\rm T} $
\parinterval 从我们的物理世界看,如果一个物理量在物体的某个位置上只是一个单值,那么它是一个标量,例如密度;如果一个物理量在同一个位置、从多个方向上看,有不同的值,那么这个物理量就是一个的张量。比如物理学中常用的应力的描述就是一个典型的张量。举一个简单的例子:$ \mathbf T(\mathbf v,\mathbf u) $是一个三维空间$(\textrm{x},\textrm{y},\textrm{z})$上的2阶张量,其中$ \mathbf v $$ \mathbf u $ 是两个向量,如图\ref{fig:tensor}所示,向量$ \mathbf v $在某个两两垂直的三维坐标系中可以表示为$ {(\begin{array}{ccc} a & b & c\end{array})}^{\rm T} $,同理向量$ \mathbf u $在某个两两垂直的三维坐标系中可以表示为$ {(\begin{array}{ccc} a' & b' & c' \end{array})}^{\rm T} $。但在三维空间$(\textrm{x},\textrm{y},\textrm{z})$中,向量$ \mathbf v $和向量$ \mathbf u $分别被表示为$ {(\begin{array}{ccc} v_x & v_y & v_z\end{array})}^{\rm T} $$ {(\begin{array}{ccc} u_x & u_y & u_z\end{array})}^{\rm T} $
%----------------------------------------------
% 图
\begin{figure}[htp]
......@@ -872,6 +895,7 @@ x_0\cdot w_0+x_1\cdot w_1+x_2\cdot w_2 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\parinterval 其中,$ \begin{pmatrix} v_x\\v_y\\v_z\end{pmatrix} $是向量$ \mathbf v $在基向量(x,y,z)上的投影,$ \begin{pmatrix} u_x\\u_y\\u_z\end{pmatrix} $是向量$ \mathbf u $在基向量(x,y,z)上的投影,$ \begin{pmatrix}T_{xx} & T_{xy} & T_{xz}\\T_{yx} & T_{yy} & T_{yz}\\T_{zx} & T_{zy} & T_{zz}\end{pmatrix} $是张量$ \mathbf T $在3*3个方向上的分量,恰巧用``矩阵''表示,记为$ [\mathbf T] $
\parinterval 上面讲了很多和神经网络不太相关的内容,目的是要明确张量的原始定义,以避免对这个概念的误解。但是,在本书中,我们仍然遵循深度学习中常用的概念,把张量理解为多维数组。使用张量,我们可以更容易的表示更高阶的数学形式。在保证数学表达的简洁性的同时,使程序实现接口更加统一。
%--5.3.1.2张量的矩阵乘法---------------------
\subsubsection{张量的矩阵乘法}\index{Chapter5.3.1.2}
......
......@@ -15,14 +15,14 @@
\indexentry{Chapter5.2.1.5|hyperpage}{18}
\indexentry{Chapter5.2.1.6|hyperpage}{19}
\indexentry{Chapter5.2.2|hyperpage}{20}
\indexentry{Chapter5.2.2.1|hyperpage}{20}
\indexentry{Chapter5.2.2.1|hyperpage}{21}
\indexentry{Chapter5.2.2.2|hyperpage}{22}
\indexentry{Chapter5.2.2.3|hyperpage}{22}
\indexentry{Chapter5.2.2.3|hyperpage}{23}
\indexentry{Chapter5.2.2.4|hyperpage}{23}
\indexentry{Chapter5.2.3|hyperpage}{24}
\indexentry{Chapter5.2.3.1|hyperpage}{24}
\indexentry{Chapter5.2.3.2|hyperpage}{26}
\indexentry{Chapter5.2.4|hyperpage}{26}
\indexentry{Chapter5.2.4|hyperpage}{27}
\indexentry{Chapter5.3|hyperpage}{31}
\indexentry{Chapter5.3.1|hyperpage}{32}
\indexentry{Chapter5.3.1.1|hyperpage}{32}
......@@ -30,8 +30,8 @@
\indexentry{Chapter5.3.1.3|hyperpage}{35}
\indexentry{Chapter5.3.2|hyperpage}{36}
\indexentry{Chapter5.3.3|hyperpage}{36}
\indexentry{Chapter5.3.4|hyperpage}{40}
\indexentry{Chapter5.3.5|hyperpage}{41}
\indexentry{Chapter5.3.4|hyperpage}{38}
\indexentry{Chapter5.3.5|hyperpage}{40}
\indexentry{Chapter5.4|hyperpage}{42}
\indexentry{Chapter5.4.1|hyperpage}{43}
\indexentry{Chapter5.4.2|hyperpage}{44}
......
......@@ -40,13 +40,13 @@
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.2.2}人工神经元和感知机}{20}{subsection.1.2.2}%
\defcounter {refsection}{0}\relax
\contentsline {subsubsection}{(一)感知机\ \raisebox {0.5mm}{------}\ 最简单的人工神经元模型}{20}{section*.18}%
\contentsline {subsubsection}{感知机\ \raisebox {0.5mm}{------}\ 最简单的人工神经元模型}{21}{section*.18}%
\defcounter {refsection}{0}\relax
\contentsline {subsubsection}{(二)神经元内部权重}{22}{section*.21}%
\contentsline {subsubsection}{神经元内部权重}{22}{section*.21}%
\defcounter {refsection}{0}\relax
\contentsline {subsubsection}{(三)神经元的输入\ \raisebox {0.5mm}{------}\ 离散 vs 连续}{22}{section*.23}%
\contentsline {subsubsection}{神经元的输入\ \raisebox {0.5mm}{------}\ 离散 vs 连续}{23}{section*.23}%
\defcounter {refsection}{0}\relax
\contentsline {subsubsection}{(四)神经元内部的参数学习}{23}{section*.25}%
\contentsline {subsubsection}{神经元内部的参数学习}{23}{section*.25}%
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.2.3}多层神经网络}{24}{subsection.1.2.3}%
\defcounter {refsection}{0}\relax
......@@ -54,7 +54,7 @@
\defcounter {refsection}{0}\relax
\contentsline {subsubsection}{单层神经网络$\rightarrow $多层神经网络}{26}{section*.34}%
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.2.4}函数拟合能力}{26}{subsection.1.2.4}%
\contentsline {subsection}{\numberline {1.2.4}函数拟合能力}{27}{subsection.1.2.4}%
\defcounter {refsection}{0}\relax
\contentsline {section}{\numberline {1.3}神经网络的张量实现}{31}{section.1.3}%
\defcounter {refsection}{0}\relax
......@@ -70,9 +70,9 @@
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.3.3}使用开源框架实现张量计算}{36}{subsection.1.3.3}%
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.3.4}神经网络中的前向传播}{40}{subsection.1.3.4}%
\contentsline {subsection}{\numberline {1.3.4}神经网络中的前向传播}{38}{subsection.1.3.4}%
\defcounter {refsection}{0}\relax
\contentsline {subsection}{\numberline {1.3.5}神经网络实例}{41}{subsection.1.3.5}%
\contentsline {subsection}{\numberline {1.3.5}神经网络实例}{40}{subsection.1.3.5}%
\defcounter {refsection}{0}\relax
\contentsline {section}{\numberline {1.4}神经网络的参数训练}{42}{section.1.4}%
\defcounter {refsection}{0}\relax
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论