Commit 6f46964c by xiaotong

new pages

parent 928a956d
...@@ -18,8 +18,9 @@ ...@@ -18,8 +18,9 @@
\usepackage{changepage} \usepackage{changepage}
\usepackage{pgfplots} \usepackage{pgfplots}
\usepackage{subfigure} \usepackage{subfigure}
\usepackage{tikz-3dplot} \usepackage{tikz-3dplot}
\usetikzlibrary{matrix}
\usetikzlibrary{arrows,decorations.pathreplacing} \usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z \usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
...@@ -105,122 +106,162 @@ ...@@ -105,122 +106,162 @@
%%%------------------------------------------------------------------------------------------------------------ %%%------------------------------------------------------------------------------------------------------------
\subsection{神经网络的简单实现:张量计算} \subsection{神经网络的简单实现:张量计算}
%%%------------------------------------------------------------------------------------------------------------ \newcounter{mycount1}
%%% 张量的简单定义 \newcounter{mycount2}
\begin{frame}{张量是什么} \newcounter{mycount3}
\begin{itemize} \newcounter{mycount4}
\item \textbf{深度学习}中,张量被``简单"地定义为\alert{多维数组}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 张量是一个多维线性函数
\begin{frame}{事实上,张量是个函数 - 别慌,了解一下 :)}
\begin{itemize}
\item \textbf{非常负责任的说},张量\alert{不是}向量和矩阵的简单扩展,甚至说,多维数组\alert{也不是}张量所必须的表达形式
\item<2-> 严格意义上,张量是:
\begin{enumerate}
\item<2-> \textbf{看不懂的定义}:由若干坐标系改变时满足一定坐标转化关系的抽象对象,它是一个不随参照系的坐标变换而变化的几何量(几何定义)
\item<3-> \textbf{还是看不懂的定义}:若干向量和协向量通过张量乘法定义的量(代数定义)
\item<4-> \textbf{还可以解释的定义}\alert{张量是多重线性函数},是定义在一些向量空间和笛卡儿积上的多重线性映射
\begin{itemize}
\item 这里把张量表示为$T(v_0,...,v_r)$,其中输入的是$r$个向量$\{v_0,...,v_r\}$
\item 多重线性是指,对于每个输入,函数都是线性的,比如,对于一个$v_i$,我们有
\vspace{-0.3em}
\begin{displaymath}
T(v_0,...,v_i+c \cdot u,...,v_r) = T(v_0,...,v_i,...,v_r) + c \cdot T(v_0,...,u,...,v_r)
\end{displaymath}
其中,$c$为任意数。这个性质非常重要,它可以推导出前面的其它定义。
\end{itemize}
\end{enumerate}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------ %%%------------------------------------------------------------------------------------------------------------
%%% 进一步解释一下张量的定义 %%% 张量矩阵乘法
\begin{frame}{张量不是``矩阵''} \begin{frame}{张量的矩阵乘法}
\begin{itemize} \begin{itemize}
\item 再理解一下, \item 对于神经网络$\textbf{y}=f(\textbf{x}\cdot \textbf{w} + \textbf{b})$$\textbf{x} \cdot \textbf{w}$$\textbf{x} \times \textbf{w}$是线性变换,其中$\textbf{x}$是输入张量,$\textbf{w}$是一个矩阵
\begin{itemize} \begin{itemize}
\item 如果一个物理量,在物体的某个位置上只是一个单值,它就是标量,比如密度 \item $\textbf{x} \cdot \textbf{w}$表示的是矩阵乘法(或记为$\times$
\item 如果它在同一个位置、从多个的方向上看,有不同的值,而且这个数恰好用矩阵乘观察方向来算出来,就是张量(rank$>$1) \item 注意这里不是张量乘法,它还有其它定义
\item $\textbf{w}$$n \times m$的矩阵,$\textbf{x}$的形状是$... \times n$,即$\textbf{x}$的第一维度需要和$\textbf{w}$的行数\\
\vspace{0.5em}
$\textbf{x}(1:2,1:2,\alert{1:3}) \times \textbf{w}(\alert{1:3},1:2) = \textbf{s}(1:2,1:2,1:2)$
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\vspace{-0.8em}
\begin{center} \begin{center}
\tdplotsetmaincoords{50}{140} \begin{tikzpicture}
\begin{tikzpicture}[scale=2,tdplot_main_coords]
\visible<3->{
\draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$a$}; \begin{scope}[yshift=6.5em,xshift=1em]
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$b$}; \visible<2->{
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$c$}; \setcounter{mycount1}{1}
\draw[step=0.5cm,color=orange,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=orange!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{1};
}
} }
\pgfmathsetmacro{\ax}{2} \end{scope}
\pgfmathsetmacro{\ay}{2}
\pgfmathsetmacro{\az}{1} \begin{scope}[yshift=6em,xshift=0.5em]
\tdplotsetrotatedcoords{20}{40}{00} \visible<2->{
\visible<4->{ \setcounter{mycount2}{2}
\draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0) \draw[step=0.5cm,color=blue,thick] (-1,-1) grid (1,1);
-- (.7,0,0) node[anchor=east]{$a'$}; \foreach \y in {+0.75,+0.25,-0.25,-0.75}
\draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0) \foreach \x in {-0.75,-0.25,0.25,0.75}{
-- (0,.7,0) node[anchor=west]{$b'$}; \node [fill=blue!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount2}};
\draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) \addtocounter{mycount2}{1};
-- (0,0,.7) node[anchor=south]{$c'$}; }
} }
\tdplottransformmainrot{\ax}{\ay}{\az} \end{scope}
\visible<3->{\node [anchor=west,inner sep=2pt] (coord1) at (-0.40in,-0.4in) {\footnotesize{方向$v=(a,b,c)$}};} \begin{scope}[yshift=5.5em,xshift=0em]
\visible<4->{\node [anchor=north west,inner sep=2pt] (coord2) at (coord1.south west) {\footnotesize{方向$u=(\red{a'}\black{,}{\color{ugreen} b'}\black{,}\blue{c'}\black{)}$}};} \visible<2->{
\setcounter{mycount3}{3}
\draw[step=0.5cm,color=ugreen,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
}
\end{scope}
\begin{scope}[xshift=0.4in,yshift=0.35in] \begin{scope}[yshift=5em,xshift=-0.5em]
\visible<2->{ \visible<2->{
\node [anchor=west,inner sep = 2pt] (description) at (0,0) {\small{$T(v,u)$是一个三维空间$(x,y,z)$上的}}; \setcounter{mycount4}{4}
\node [anchor=north west,inner sep = 2pt] (description2) at (description.south west) {\small{2阶张量,其中$v$$u$是两个向量}}; \draw[step=0.5cm,color=red,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount4}};
\addtocounter{mycount4}{1};
}
\node [anchor=north] (xlabel) at (0,-1.2) {$\textbf{x}$};
} }
\end{scope}
\visible<5->{ \begin{scope}[yshift=5em,xshift=1.5in]
\node [anchor=north west,inner sep=2pt] (T) at ([yshift=-2em]description2.south west) {\small{$T(v,u)=$}}; \visible<2->{
\node [anchor=west,inner sep=1pt] (T2) at (T.east) {\footnotesize{$\begin{pmatrix} v_x \\ v_y \\ v_z \end{pmatrix}^T$}}; \draw[step=0.5cm,thick] (-0.5,-1) grid (0.5,1.0);
\node [anchor=west,inner sep=1pt] (T3) at ([xshift=2pt]T2.east) {\footnotesize{$\begin{pmatrix} T_{xx} & T_{xy} & T_{xz} \\ T_{yx} & T_{yy} & T_{yz} \\ T_{zx} & T_{zy} & T_{zz} \end{pmatrix}$}}; \node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (-0.25,0.75) {-1};
\node [anchor=west,inner sep=1pt] (T4) at ([xshift=2pt]T3.east) {\footnotesize{$\begin{pmatrix} u_x \\ u_y \\ u_z \end{pmatrix}$}}; \node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (-0.25,0.25) {0};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (-0.25,-0.25) {1};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (-0.25,-0.75) {0};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (0.25,0.75) {0};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (0.25,0.25) {-1};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (0.25,-0.25) {1};
\node [fill=black!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (0.25,-0.75) {0};
\node [anchor=north] (xlabel) at (0,-1.2) {$\textbf{w}$};
} }
\begin{pgfonlayer}{background}
\visible<7->{ \visible<3>{\draw [->,thick] (-1.5in+2em+1.5em,-0.3) .. controls +(east:2) and +(west:1) .. (-0.55,0.8) node [pos=0.5,left] {\textbf{矩阵乘}};}
\node [rectangle,inner sep=0pt,fill=red!20,minimum height=3.5em] [fit = (T3) ] (TBox) {}; \visible<4>{\draw [->,thick] (-1.5in+2em+1.0em,-0.5) .. controls +(east:2) and +(west:1) .. (-0.55,0.8) node [pos=0.5,left] {\textbf{$\times$}};}
\visible<5>{\draw [->,thick] (-1.5in+2em+0.5em,-0.7) .. controls +(east:2) and +(west:1) .. (-0.55,0.8) node [pos=0.5,left] {\textbf{$\times$}};}
\visible<6->{\draw [->,thick] (-1.5in+2em,-0.9) .. controls +(east:2) and +(west:1) .. (-0.55,0.8) node [pos=0.5,left] {\textbf{$\times$}};}
\end{scope}
\begin{scope}[yshift=6.5em,xshift=1em+3in]
\visible<3->{
\draw[step=0.5cm,color=orange,thick] (-0.5,-1) grid (0.5,1.0);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}{
\setcounter{mycount1}{2}
\foreach \x in {-0.25,0.25}{
\node [fill=orange!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{-1};
}
} }
\visible<6->{
\node [rectangle,inner sep=0pt,fill=green!20,minimum height=3.5em] [fit = (T2) ] (VBox) {};
\node [rectangle,inner sep=0pt,fill=blue!20,minimum height=3.5em] [fit = (T4) ] (UBox) {};
} }
\end{pgfonlayer} \end{scope}
\begin{scope}[yshift=6em,xshift=0.5em+3in]
\visible<4->{
\draw[step=0.5cm,color=blue,thick] (-0.5,-1) grid (0.5,1.0);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}{
\setcounter{mycount1}{2}
\foreach \x in {-0.25,0.25}{
\node [fill=blue!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{-1};
}
}
}
\end{scope}
\begin{scope}[yshift=5.5em,xshift=0em+3in]
\visible<5->{
\draw[step=0.5cm,color=ugreen,thick] (-0.5,-1) grid (0.5,1.0);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}{
\setcounter{mycount1}{2}
\foreach \x in {-0.25,0.25}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{-1};
}
}
}
\end{scope}
\begin{scope}[yshift=5.0em,xshift=-0.5em+3in]
\visible<6->{ \visible<6->{
\draw [<-] (VBox.north) -- ([yshift=0.3em]VBox.north); \draw[step=0.5cm,color=red,thick] (-0.5,-1) grid (0.5,1.0);
\node [anchor=south,align=left] (Vlabel) at ([yshift=0.3em]VBox.north) {\scriptsize{$v$在基向量上的投影}}; \foreach \y in {+0.75,+0.25,-0.25,-0.75}{
\draw [<-] (UBox.north) -- ([yshift=0.3em]UBox.north); \setcounter{mycount1}{2}
\node [anchor=south,align=left] (Ulabel) at ([yshift=0.3em,xshift=-1em]UBox.north) {\scriptsize{$u$在基向量上的投影}}; \foreach \x in {-0.25,0.25}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{-1};
}
} }
\visible<7->{ }
\draw [<-] (TBox.south) -- ([yshift=-0.3em]TBox.south);
\node [anchor=north,align=left] (Vlabel) at ([yshift=-0.3em]TBox.south) {\scriptsize{张量在$3 \times 3$个方向上的分量,记为$[T]$}}; \visible<3->{
\node [anchor=north west,align=left] (Vlabel2) at ([yshift=0.2em]Vlabel.south west) {\scriptsize{想象一下坐标系的旋转}}; \node [anchor=north] (xlabel) at (0,-1.2) {$\textbf{x} \cdot \textbf{w}$};
\node [anchor=center] (elabel) at (-0.7in,0) {\Huge{$=$}};
} }
\end{scope} \end{scope}
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
\end{frame} \end{frame}
%%%------------------------------------------------------------------------------------------------------------ %%%------------------------------------------------------------------------------------------------------------
%%% 如何在深度学习中定义一个张量
\begin{frame}{在神经网络中使用张量}
\begin{itemize}
\item 但是前面的可以忽略 - 在这里,``\alert{张量就是多维数组}''
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
\subsection{参数学习 - 反向传播} \subsection{参数学习 - 反向传播}
\end{CJK} \end{CJK}
......
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
\usepackage{changepage} \usepackage{changepage}
\usepackage{pgfplots} \usepackage{pgfplots}
\usepackage{subfigure} \usepackage{subfigure}
\usepackage{tikz-3dplot}
\usetikzlibrary{matrix}
\usetikzlibrary{arrows,decorations.pathreplacing} \usetikzlibrary{arrows,decorations.pathreplacing}
\usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z \usetikzlibrary{shadows} % LATEX and plain TEX when using Tik Z
...@@ -424,7 +426,7 @@ GPT-2 (Transformer) & Radford et al. & 2019 & \alert{35.7} ...@@ -424,7 +426,7 @@ GPT-2 (Transformer) & Radford et al. & 2019 & \alert{35.7}
\begin{frame}{一个例子 - 输入形式} \begin{frame}{一个例子 - 输入形式}
\begin{itemize} \begin{itemize}
\item 在遭受了女友一万点伤害之后,你意识到决策不应该只考虑非0即1的因素,应该把"程度"考虑进来: \item 在遭受了女友一万点伤害之后,你意识到决策不应该只考虑非0即1的因素,应该把``程度''考虑进来:
\begin{itemize} \begin{itemize}
\item $x_0$:10/距离 \item $x_0$:10/距离
\item $x_1$:150/票价 \item $x_1$:150/票价
...@@ -1186,104 +1188,106 @@ cycle} ...@@ -1186,104 +1188,106 @@ cycle}
%%%------------------------------------------------------------------------------------------------------------ %%%------------------------------------------------------------------------------------------------------------
%%% 常用的激活函数 %%% 常用的激活函数
\begin{frame}{常用的激活函数} \begin{frame}{常用的激活函数}
\begin{itemize} \begin{itemize}
\item 好多好多,列举不全 ... \item 好多好多,列举不全 ...
\end{itemize} \end{itemize}
\begin{figure} \vspace{-1em}
\centering \begin{figure}
\subfigure[softplus]{ \subfigure[softplus]{
\centering \centering
\begin{minipage}{.2\textwidth} \begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \x in {-1.0,-0.5,0.0,0.5,1.0}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};}
\foreach \y in {1,0.5}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \foreach \y in {1.0,0.5}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\draw[color=red ,domain=-1.2:1]plot(\x,{ln(1+(exp(\x))})node[right,black]{\tiny $y = ln(1+e^x)$}; \draw[color=red ,domain=-1.2:1]plot(\x,{ln(1+(exp(\x))});
\node[black,anchor=south] at (0,1.2) {\small $y = ln(1+e^x)$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage}% \end{minipage}%
} }
\hfill \hfill
\subfigure[sigmoid]{ \subfigure[sigmoid]{
\centering \centering
\begin{minipage}{.2\textwidth} \begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\draw[dashed](-1.2,1)--(1.2,1); \draw[dashed](-1.2,1)--(1.2,1);
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){
\foreach \y in {0.5,1}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \pgfmathparse{(\x)*5}
\draw[color=red ,domain=-1.2:1.2]plot(\x,{1/(1+(exp(-1*(\x))))})node[right,black]{\tiny $y = \frac{1}{1+e^{-x}}$}; \pgfmathresult};}
\node[black,anchor=south] at (0,1.2) {\tiny $y = \frac{1}{1+e^{-x}}$}; \foreach \y in {0.5,1.0}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\draw[color=red,domain=-1.2:1.2]plot(\x,{1/(1+(exp(-5*\x)))});
\node[black,anchor=south] at (0,1.2) {\small $y = \frac{1}{1+e^{-x}}$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage}% \end{minipage}%
} }
\hfill \hfill
\subfigure[tanh]{ \subfigure[tanh]{
\centering \centering
\begin{minipage}{.2\textwidth} \begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\draw[dashed](-1.2,1)--(1.2,1); \draw[dashed](-1.2,1)--(1.2,1);
\draw[dashed](-1.2,-1)--(1.2,-1); \draw[dashed](-1.2,-1)--(1.2,-1);
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \x in {-1.0,-0.5,0.0,0.5,1.0}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};}
\foreach \y in {0.5,1}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \foreach \y in {0.5,1.0}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\draw[color=red ,domain=-1.2:1.2]plot(\x,{tanh(\x)})node[below,black]{\tiny $y = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$}; \draw[color=red ,domain=-1.2:1.2]plot(\x,{tanh(\x)});
\node[black,anchor=south] at (0,1.2) {\small $y = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage} \end{minipage}
} }
\end{figure}
\end{figure} \vspace{-1em}
\begin{figure}
\begin{figure} \subfigure[relu]{
\centering
\centering \begin{minipage}{.2\textwidth}
\subfigure[relu]{
\centering
\begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\draw[dashed](-1.2,1)--(1.2,1); \draw[dashed](-1.2,1)--(1.2,1);
\draw[dashed](-1.2,-1)--(1.2,-1); \draw[dashed](-1.2,-1)--(1.2,-1);
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \x in {-1.0,-0.5,0.0,0.5,1.0}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};}
\foreach \y in {0.5,1}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \foreach \y in {0.5,1.0}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\draw[color=red ,domain=-1.2:1.2]plot(\x,{max(\x,0)})node[right,black]{\tiny $y =\max (0, x)$}; \draw[color=red ,domain=-1.2:1.2]plot(\x,{max(\x,0)});
\node[black,anchor=south] at (0,1.2) {\small $y =\max (0, x)$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage}% \end{minipage}%
} }
\hfill \hfill
\subfigure[gaussian]{ \subfigure[gaussian]{
\centering \centering
\begin{minipage}{.2\textwidth} \begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\draw[dashed](-1.2,1)--(1.2,1); \draw[dashed](-1.2,1)--(1.2,1);
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \x in {-1.0,-0.5,0.0,0.5,1.0}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};}
\foreach \y in {0.5,1}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \foreach \y in {0.5,1.0}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\draw[color=red ,domain=-1.2:1.2]plot(\x,{exp(-1*((\x)^2))})node[right,black]{\tiny $y =e^{-x^2}$}; \draw[color=red ,domain=-1.2:1.2]plot(\x,{exp(-1*((\x)^2))});
\node[black,anchor=south] at (0,1.2) {\small $y =e^{-x^2}$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage}% \end{minipage}%
} }
\hfill \hfill
\subfigure[identity]{ \subfigure[identity]{
\centering \centering
\begin{minipage}{.2\textwidth} \begin{minipage}{.2\textwidth}
\begin{tikzpicture} \begin{tikzpicture}
\draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$}; \draw[->](-1.2,0)--(1.2,0)node[left,below,font=\tiny]{$x$};
\draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$}; \draw[->](0,-1.2)--(0,1.2)node[right,font=\tiny]{$y$};
\foreach \x in {-1.0,-0.5,0.0,0.5,1.0}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};}
\foreach \x in {-1,-0.5,0,0.5,1}{\draw(\x,0)--(\x,0.05)node[below,outer sep=2pt,font=\tiny]at(\x,0){\x};} \foreach \y in {0.5,1.0}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};}
\foreach \y in {0.5,1}{\draw(0,\y)--(0.05,\y)node[left,outer sep=2pt,font=\tiny]at(0,\y){\y};} \draw[color=red ,domain=-1:1]plot(\x,\x);
\draw[color=red ,domain=-1:1]plot(\x,\x)node[right,black]{\tiny $y =x$}; \node[black,anchor=south] at (0,1.2) {\small $y =x$};
\end{tikzpicture} \end{tikzpicture}
\end{minipage} \end{minipage}
} }
\end{figure}
\end{figure}
\end{frame} \end{frame}
...@@ -1654,6 +1658,288 @@ cycle} ...@@ -1654,6 +1658,288 @@ cycle}
\end{frame} \end{frame}
\newcounter{mycount1}
\newcounter{mycount2}
\newcounter{mycount3}
\newcounter{mycount4}
%%%------------------------------------------------------------------------------------------------------------
%%% 张量的简单定义
\begin{frame}{张量是什么}
\begin{itemize}
\item \textbf{深度学习}中,张量被``简单"地定义为\alert{多维数组}
\begin{itemize}
\item 张量的阶(rank)表示有多少个独立的方向,每个方向可以由多个维度表示
\end{itemize}
\end{itemize}
\begin{center}
\begin{tikzpicture}
\begin{scope}
\visible<2->{
\node [anchor=north] (label) at (0,0) {标量};
\node [anchor=center] (label2) at ([yshift=-0.7em]label.south) {scalar};
\node [anchor=center] (rank) at ([yshift=-1.5em]label2.center) {(rank=0)};
\node [anchor=center] (scalar) at ([yshift=5em]label.north) {\Huge{3}};
}
\end{scope}
\begin{scope}[xshift=1in]
\visible<3->{
\node [anchor=north] (label) at (0,0) {向量};
\node [anchor=center] (label2) at ([yshift=-0.7em]label.south) {vector};
\node [anchor=center] (rank) at ([yshift=-1.5em]label2.center) {(rank=1)};
\node [anchor=center] (scalar) at ([yshift=5em]label.north) {$\begin{pmatrix} 2 \\ .3 \\ -8 \\ .2\end{pmatrix}$};
}
\end{scope}
\begin{scope}[xshift=2in]
\visible<4->{
\node [anchor=north] (label) at (0,0) {矩阵};
\node [anchor=center] (label2) at ([yshift=-0.7em]label.south) {matrix};
\node [anchor=center] (rank) at ([yshift=-1.5em]label2.center) {(rank=2)};
\node [anchor=center] (scalar) at ([yshift=5em]label.north) {$\begin{pmatrix} 1 & 1 & 9 \\ 1 & 0 & 0 \\ 1 & -4 & 7 \end{pmatrix}$};
}
\end{scope}
\begin{scope}[xshift=3.2in]
\visible<5->{
\node [anchor=north] (label) at (0,0) {3阶张量};
\node [anchor=center] (label2) at ([yshift=-0.7em]label.south) {tensor};
\node [anchor=center] (rank) at ([yshift=-1.5em]label2.center) {(rank=3)};
}
\begin{scope}[yshift=6.5em,xshift=1em]
\visible<5->{
\setcounter{mycount1}{1}
\draw[step=0.5cm,color=orange,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=orange!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount1}};
\addtocounter{mycount1}{1};
}
}
\end{scope}
\begin{scope}[yshift=6em,xshift=0.5em]
\visible<5->{
\setcounter{mycount2}{1}
\draw[step=0.5cm,color=blue,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=blue!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount2}};
\addtocounter{mycount2}{1};
}
}
\end{scope}
\begin{scope}[yshift=5.5em,xshift=0em]
\visible<5->{
\setcounter{mycount3}{1}
\draw[step=0.5cm,color=ugreen,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
}
\end{scope}
\begin{scope}[yshift=5em,xshift=-0.5em]
\visible<5->{
\setcounter{mycount4}{1}
\draw[step=0.5cm,color=red,thick] (-1,-1) grid (1,1);
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
\foreach \x in {-0.75,-0.25,0.25,0.75}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,\y) {\number\value{mycount4}};
\addtocounter{mycount4}{1};
}
}
\end{scope}
\end{scope}
\end{tikzpicture}
\end{center}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 张量是一个多维线性函数
\begin{frame}{事实上,张量不是简单的多维数组 - 别慌,了解下 :)}
\begin{itemize}
\item \textbf{非常负责任的说},张量\alert{不是}向量和矩阵的简单扩展,甚至说,多维数组\alert{也不是}张量所必须的表达形式
\item<2-> 严格意义上,张量是:
\begin{enumerate}
\item<2-> \textbf{看不懂的定义}:由若干坐标系改变时满足一定坐标转化关系的抽象对象,它是一个不随参照系的坐标变换而变化的几何量(几何定义)
\item<3-> \textbf{还是看不懂的定义}:若干向量和协向量通过张量乘法定义的量(代数定义)
\item<4-> \textbf{还可以解释的定义}\alert{张量是多重线性函数},是定义在一些向量空间和笛卡儿积上的多重线性映射
\begin{itemize}
\item 这里把张量表示为$T(v_0,...,v_r)$,其中输入的是$r$个向量$\{v_0,...,v_r\}$
\item 多重线性是指,对于每个输入,函数都是线性的,比如,对于一个$v_i$,我们有
\vspace{-0.3em}
\begin{displaymath}
T(v_0,...,v_i+c \cdot u,...,v_r) = T(v_0,...,v_i,...,v_r) + c \cdot T(v_0,...,u,...,v_r)
\end{displaymath}
其中,$c$为任意数。这个性质非常重要,它可以推导出前面的其它定义。
\end{itemize}
\end{enumerate}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 进一步解释一下张量的定义
\begin{frame}{张量是一个``量'',不是``矩阵''}
\begin{itemize}
\item 再理解一下,
\begin{itemize}
\item 如果一个物理量,在物体的某个位置上只是一个单值,它就是标量,比如密度
\item 如果它在同一个位置、从多个的方向上看,有不同的值,而且这个数恰好用矩阵乘观察方向来算出来,就是张量(rank$>$1),比如应力张量
\end{itemize}
\end{itemize}
\vspace{-0.8em}
\begin{center}
\tdplotsetmaincoords{50}{140}
\begin{tikzpicture}[scale=2,tdplot_main_coords]
\visible<3->{
\draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$a$};
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$b$};
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$c$};
}
\pgfmathsetmacro{\ax}{2}
\pgfmathsetmacro{\ay}{2}
\pgfmathsetmacro{\az}{1}
\tdplotsetrotatedcoords{20}{40}{00}
\visible<4->{
\draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0)
-- (.7,0,0) node[anchor=east]{$a'$};
\draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0)
-- (0,.7,0) node[anchor=west]{$b'$};
\draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
-- (0,0,.7) node[anchor=south]{$c'$};
}
\tdplottransformmainrot{\ax}{\ay}{\az}
\visible<3->{\node [anchor=west,inner sep=2pt] (coord1) at (-0.40in,-0.4in) {\footnotesize{方向$v=(a,b,c)$}};}
\visible<4->{\node [anchor=north west,inner sep=2pt] (coord2) at (coord1.south west) {\footnotesize{方向$u=(\red{a'}\black{,}{\color{ugreen} b'}\black{,}\blue{c'}\black{)}$}};}
\begin{scope}[xshift=0.4in,yshift=0.35in]
\visible<2->{
\node [anchor=west,inner sep = 2pt] (description) at (0,0) {\small{$T(v,u)$是一个三维空间$(x,y,z)$上的}};
\node [anchor=north west,inner sep = 2pt] (description2) at (description.south west) {\small{2阶张量,其中$v$$u$是两个向量}};
}
\visible<5->{
\node [anchor=north west,inner sep=2pt] (T) at ([yshift=-2em]description2.south west) {\small{$T(v,u)=$}};
\node [anchor=west,inner sep=1pt] (T2) at (T.east) {\footnotesize{$\begin{pmatrix} v_x \\ v_y \\ v_z \end{pmatrix}^T$}};
\node [anchor=west,inner sep=1pt] (T3) at ([xshift=2pt]T2.east) {\footnotesize{$\begin{pmatrix} T_{xx} & T_{xy} & T_{xz} \\ T_{yx} & T_{yy} & T_{yz} \\ T_{zx} & T_{zy} & T_{zz} \end{pmatrix}$}};
\node [anchor=west,inner sep=1pt] (T4) at ([xshift=2pt]T3.east) {\footnotesize{$\begin{pmatrix} u_x \\ u_y \\ u_z \end{pmatrix}$}};
}
\begin{pgfonlayer}{background}
\visible<7->{
\node [rectangle,inner sep=0pt,fill=red!20,minimum height=3.5em,minimum width=7em] [fit = (T3) ] (TBox) {};
}
\visible<6->{
\node [rectangle,inner sep=0pt,fill=green!20,minimum height=3.5em,minimum width=3em] [fit = (T2) ] (VBox) {};
\node [rectangle,inner sep=0pt,fill=blue!20,minimum height=3.5em,minimum width=2.5em] [fit = (T4) ] (UBox) {};
}
\end{pgfonlayer}
\visible<6->{
\draw [<-] (VBox.north) -- ([yshift=0.3em]VBox.north);
\node [anchor=south,align=left] (Vlabel) at ([yshift=0.3em]VBox.north) {\scriptsize{$v$在基向量上的投影}};
\draw [<-] (UBox.north) -- ([yshift=0.3em]UBox.north);
\node [anchor=south,align=left] (Ulabel) at ([yshift=0.3em,xshift=-1em]UBox.north) {\scriptsize{$u$在基向量上的投影}};
}
\visible<7->{
\draw [<-] (TBox.south) -- ([yshift=-0.3em]TBox.south);
\node [anchor=north,align=left] (Vlabel) at ([xshift=-0.5em,yshift=-0.3em]TBox.south) {\scriptsize{张量在$3 \times 3$个方向上的分量,恰巧用``矩阵''表示,}};
\node [anchor=north west,align=left] (Vlabel2) at ([yshift=0.2em]Vlabel.south west) {\scriptsize{记为$[T]$,想象一下坐标系的旋转}};
}
\end{scope}
\end{tikzpicture}
\end{center}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 如何在深度学习中定义一个张量
\begin{frame}{``矩阵''是``张量''的扩展:在神经网络中使用张量}
\begin{itemize}
\item 但是前面的可以忽略 - 在这里,``\alert{张量就是多维数组}''
\begin{itemize}
\item 向量、矩阵都可以看做数学上的``张量''的扩展
\end{itemize}
\item<2-> 张量$T(1:3)$表示一个向量,有三个元素\\
\vspace{0.5em}
\begin{tikzpicture}
\begin{scope}
\node [anchor=north east, inner sep=1pt] (label) at (0,0) {物理存储:};
\draw[step=0.5cm,thick] (0,-0.5) grid (1.5,0);
\setcounter{mycount1}{1}
\foreach \x in {0.25,0.75,1.25}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount1}};
\addtocounter{mycount1}{1};
}
\end{scope}
\end{tikzpicture}
\item<3-> 张量$T(1:2,1:3)$表示一个$3 \times 2$的矩阵\\
\vspace{0.5em}
\begin{tikzpicture}
\begin{scope}
\node [anchor=north east, inner sep=1pt] (label) at (0,0) {物理存储:};
\draw[step=0.5cm,thick] (0,-0.5) grid (3.0,0);
\setcounter{mycount2}{1}
\foreach \x in {0.25,0.75,1.25}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount2}};
\addtocounter{mycount2}{1};
}
\foreach \x in {1.75,2.25,2.75}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount2}};
\addtocounter{mycount2}{1};
}
\end{scope}
\end{tikzpicture}
\item<4-> 张量$T(1:2,1:2,1:3)$表示一个三阶张量,大小是$3 \times 2 \times 2$\\
\vspace{0.5em}
\begin{tikzpicture}
\begin{scope}
\node [anchor=north east, inner sep=1pt] (label) at (0,0) {物理存储:};
\draw[step=0.5cm,thick] (0,-0.5) grid (6.0,0);
\setcounter{mycount3}{1}
\foreach \x in {0.25,0.75,1.25}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
\foreach \x in {1.75,2.25,2.75}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
\foreach \x in {3.25,3.75,4.25}{
\node [fill=green!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
\foreach \x in {4.75,5.25,5.75}{
\node [fill=red!20,inner sep=0pt,minimum height=0.49cm,minimum width=0.49cm] at (\x,-0.25) {\number\value{mycount3}};
\addtocounter{mycount3}{1};
}
\draw[decorate,thick,decoration={brace,mirror,raise=0.2em}] (0,-0.50) -- (2.95,-0.50);
\draw[decorate,thick,decoration={brace,mirror,raise=0.2em}] (3.05,-0.50) -- (6,-0.50);
\node [anchor=north] (subtensor1) at (1.5,-0.6) {\footnotesize{$3 \times 2$ sub-tensor}};
\node [anchor=north] (subtensor1) at (4.5,-0.6) {\footnotesize{$3 \times 2$ sub-tensor}};
\end{scope}
\end{tikzpicture}
\item<5-> 高阶张量:数组!数组!数组!
\begin{itemize}
\item 和C++、Python中的多维数组一模一样
\end{itemize}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------ %%%------------------------------------------------------------------------------------------------------------
\subsection{参数学习 - 反向传播} \subsection{参数学习 - 反向传播}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论