\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}$。
\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}$。
\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列的矩阵。
\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}$。例如:
\mathbf c & = &\mathbf a\odot\mathbf b \nonumber\\
& = &\begin{pmatrix}
1\times 3 & 0\times1\\
1\times 3 & 0\times1\\
-1\times2 & 3\times1
-1\times2 & 3\times1
\end{pmatrix}
\end{pmatrix}
...
@@ -317,7 +326,7 @@
...
@@ -317,7 +326,7 @@
%--5.2.1.5线性映射---------------------
%--5.2.1.5线性映射---------------------
\subsubsection{线性映射}\index{Chapter5.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 $,有:
\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 $列向量,对于:
\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 $被称作激活函数,其本质是一个非线性函数。可见,一个人工神经元的功能是将输入向量与权重矩阵右乘(做内积)后,加上偏置量,经过一个非线性激活函数得到一个标量结果。
\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 从几何角度上看,公式中的$\mathbf x\cdot\mathbf w+\mathbf b $将$\mathbf x $右乘$\mathbf w $相当于对$\mathbf x $进行旋转变换,如图\ref{fig:rotation}所示,对三个点$(0,0)$,$(0,1)$,$(1,0)$及其围成的矩形区域右乘如下矩阵:
\parinterval 那激活函数又是什么?神经元在接收到经过线性变换的结果后,通过激活函数的处理,得到最终的输出$\mathbf y $。激活函数的目的是解决实际问题中的非线性变换,线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。 特别是在实际问题中,很多现象都无法用简单的线性关系描述,这时激活函数的非线性就为描述更加复杂的问题提供了工具。
\parinterval 那激活函数又是什么?神经元在接收到经过线性变换的结果后,通过激活函数的处理,得到最终的输出$\mathbf y $。激活函数的目的是解决实际问题中的非线性变换,线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。 特别是在实际问题中,很多现象都无法用简单的线性关系描述,这时激活函数的非线性就为描述更加复杂的问题提供了工具。常见的非线性函数有Sigmoid、Relu、Tanh等。如图\ref{fig:activation}列举了几种激活函数的形式。
\parinterval 神经网络方法本质上就是在构造一个函数,将输入$\mathbf x $转化为输出$\mathbf y $。神经网络方法之所以受到青睐一方面是由于它提供了端到端学习的模式,另一方面是由于它强大的函数拟合能力。理论上说,神经网络可以拟合任何形状的函数。下面就来看一下为什么神经网络会有这样的能力。
\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}$。