费雪信息矩阵

介绍

费雪信息矩阵是用来度量随机变量X所含有的关于自身随机分布函数位置参数$\theta$ 的信息量,最大似然估计中有着重要的度量价值

费雪信息矩阵体现了最大似然估计的参数方差,可以体现似然方法的准确程度,在统计学中有重要的地位,并且在经济学、医学等的相关统计领域应用广泛

定义

对于一个i.i.d.的数据组$X_1,X_2,…,X_n$存在概率密度函数且服从一个概率分布$f(X,\theta)$, $\theta$ 为描述此分布的参数,利用最大似然估计法,当$X_i$已知,但$\theta$未知,得到使得发生所有$X_i$对应的最可能的 $\theta$值
$$
L(\textbf{X})=\prod_{i=1}^nf(X_i;\theta)\
\hat{\theta}=argmax_{\theta}L(\textbf{X})
$$
此时 $\theta$ 的估计值 $\hat{\theta}$ 就是使得 $L(\textbf{X})$ 取得最大值的值

对 $L(X)$ 先取对数,再求一阶偏导,得到其一阶偏导数的矩阵,记为$S(\textbf{X};\theta)$ 。事实上,使得$S=0$ 的 $\theta$ 的值代表了MLE的估计值
$$
S(\textbf{X}; \theta)=\sum_{i=1}^n\frac{\part \log f(X_i;\theta)}{\partial \theta}
$$
$S$ 维度为$n\times 1$, $n$ 为 $\theta$ 的维度 $(S$ 之后会用得到$)$

那我们定义费雪信息矩阵 $I(\theta)$ 为 $S(I,\theta)$ 的二阶中心矩,同时又等于为$L(\textbf{X};\theta)$二阶偏导的期望矩阵
$$
I(\theta)=E[S(\textbf{X};\theta)^2|\theta]
=E[\frac{\part \log L(\textbf{X};\theta)}{\partial\theta}\frac{\part \log L(\textbf{X};\theta)}{\partial\theta^T}|\theta]
=-E[\frac{\part ^2\log L(\textbf{X};\theta)}{\partial\theta\partial\theta^T}|\theta]
$$
(第二个等号的证明用到第一个性质$E[S(\textbf{X};\theta)]=0,$ 可自行验证)

举例正态分布

对于满足正态分布的$n$个 i.i.d. 随机变量
$$
\log L(\mu,\sigma^2)=-\frac{n}{2}\log (\sigma^2)-\frac{n}{2}\log (2\pi)-\frac{1}{2\sigma^2}\sum_{i=1}^n(X_i-\mu)^2
$$
不论直接计算二阶偏导的期望矩阵还是计算一阶偏导生成矩阵的期望,都可以得到
$$
I(\mu,\sigma^2)=\left\lbrack \begin{array}{cc}
\frac{n}{\sigma^2 } & 0\
0 & \frac{n}{2\sigma^4 }
\end{array}\right\rbrack
$$

性质以及用途

在一般情形下
$$
E[S(\textbf{X};\theta)|\theta]=E[\frac{\part }{\part\theta}\log f(\textbf{X};\theta)|\theta]=\int\frac{\frac{\part}{\part\theta } f(x;\theta)}{f(x;\theta)}f(x;\theta)dx=\frac{\part}{\part\theta}\int f(x;\theta)dx=\frac{\part}{\part\theta}1=0
$$
因此添加上该零项之后:
$$
I(\theta)=E[S(\textbf{X};\theta)^2|\theta]-E[S(\textbf{X};\theta)|\theta]^2=Var[S(\textbf{X};\theta)|\theta]
$$
从而费雪信息矩阵在直观上代表了MLE方程的方差,在一定程度上会与解得的$\hat{\theta}$的方差有关。

下面不予以详细说明。代表方差的性质可以用来估计在某一分布下,不同的 $\textbf{X}$ 所得到 $\theta$ 的方差。

事实上,所解得到的 $\hat{\theta}$ 满足如下分布:
$$
\sqrt{nI(\theta_0)}(\hat{\theta}-\theta_0)\overset{D}{\to} N(0,I_p)
$$
其中 $\theta_0$ 为参数的真实值,$I_p$ 为单位矩阵,$I(\theta_0)$中元素的值的大小与解得的$\hat{\theta}$的方差负相关

例如刚才的正态分布,

$$ \left\lbrack \begin{array}{cc} \frac{n}{\sigma } & 0\\ 0 & \frac{n}{\sqrt{2}\sigma^2 } \end{array}\right\rbrack \left(\left\lbrack \begin{array}{c} \hat{\mu} \\ \hat{\sigma^2 } \end{array}\right\rbrack -\left\lbrack \begin{array}{c} \mu \\ \sigma^2 \end{array}\right\rbrack \right)\overset{D}{\to} N\left(0,I_p \right) $$

所以

$$ \left\lbrack \begin{array}{c} \hat{\mu} \\ \hat{\sigma^2 } \end{array}\right\rbrack \overset{D}{\to} N\left(\left\lbrack \begin{array}{c} \mu \\ \sigma^2 \end{array}\right\rbrack ,\left\lbrack \begin{array}{cc} \frac{n^2 }{\sigma^2 } & 0\\ 0 & \frac{n^2 }{{2\sigma }^4 } \end{array}\right\rbrack ^{-1}\right) $$

那这样根据估计值 $[\hat{\mu},\hat{\sigma}^2]^T$ ,并且用该点处的费雪矩阵近似替换掉真实点处的费雪矩阵,得到对应95%的置信区间

$$ \left(\left\lbrack \begin{array}{c} \hat{\mu} \\ \hat{\sigma^2 } \end{array}\right\rbrack -\left\lbrack \begin{array}{cc} \frac{n}{\hat{\sigma} } & 0\\ 0 & \frac{n}{\sqrt{2}{\hat{\sigma} }^2 } \end{array}\right\rbrack ^{-1}\left\lbrack \begin{array}{c} \Phi^{-1} \left(1-0\ldotp 025\right)\\ \Phi^{-1} \left(1-0\ldotp 025\right) \end{array}\right\rbrack,\left\lbrack \begin{array}{c} \hat{\mu} \\ \hat{\sigma^2 } \end{array}\right\rbrack +\left\lbrack \begin{array}{cc} \frac{n}{\hat{\sigma} } & 0\\ 0 & \frac{n}{\sqrt{2}{\hat{\sigma} }^2 } \end{array}\right\rbrack ^{-1}\left\lbrack \begin{array}{c} \Phi^{-1} \left(1-0\ldotp 025\right)\\ \Phi^{-1} \left(1-0\ldotp 025\right) \end{array}\right\rbrack\right) $$

总结

费雪矩阵总体而言是相当有帮助的,对于确定估计值的准确性意义重大,而更多的有用性质尚未陈列,大家可以自行搜索了解

参考:复旦侯燕曦老师金融计量学课件

​ 维基百科

​ CSDN https://blog.csdn.net/artifact1/article/details/80731417

AlexNet详细解读

AlexNet详细解读

之前在自学计算机视觉与深度学习方向的论文,今天给大家带来的是很经典的一篇文章 :《ImageNet Classification with Deep Convolutional Neural Networks》。纯粹是自学之后,自己的一点知识总结,如果有什么不对的地方欢迎大家指正。AlexNet的篇文章当中,我们可以主要从五个大方面去讲:ReLU,LPN,Overlapping Pooling,总体架构,减少过度拟合。重点介绍总体结构和减少过度拟合。

1. ReLU Nonlinearity

一般神经元的激活函数会选择sigmoid函数或者tanh函数,然而Alex发现在训练时间的梯度衰减方面,这些非线性饱和函数要比非线性非饱和函数慢很多。在AlexNet中用的非线性非饱和函数是f=max(0,x),即ReLU。实验结果表明,要将深度网络训练至training error rate达到25%的话,ReLU只需5个epochs的迭代,但tanh单元需要35个epochs的迭代,用ReLU比tanh快6倍。

2. 双GPU并行运行

为提高运行速度和提高网络运行规模,作者采用双GPU的设计模式。并且规定GPU只能在特定的层进行通信交流。其实就是每一个GPU负责一半的运算处理。作者的实验数据表示,two-GPU方案会比只用one-GPU跑半个上面大小网络的方案,在准确度上提高了1.7%的top-1和1.2%的top-5。值得注意的是,虽然one-GPU网络规模只有two-GPU的一半,但其实这两个网络其实并非等价的。

3. LRN局部响应归一化

img

ReLU本来是不需要对输入进行标准化,但本文发现进行局部标准化能提高性能。

其中a代表在feature map中第i个卷积核(x,y)坐标经过了ReLU激活函数的输出,n表示相邻的几个卷积核。N表示这一层总的卷积核数量。k, n, α和β是hyper-parameters,他们的值是在验证集上实验得到的,其中k = 2,n = 5,α = 0.0001,β = 0.75。

这种归一化操作实现了某种形式的横向抑制,这也是受真实神经元的某种行为启发。

卷积核矩阵的排序是随机任意,并且在训练之前就已经决定好顺序。这种LPN形成了一种横向抑制机制。

4. Overlapping Pooling

池层是相同卷积核领域周围神经元的输出。池层被认为是由空间距离s个像素的池单元网格的组成。也可以理解成以大小为步长对前面卷积层的结果进行分块,对块大小为的卷积映射结果做总结,这时有。然而,Alex说还有的情况,也就是带交叠的Pooling,顾名思义这指Pooling单元在总结提取特征的时候,其输入会受到相邻pooling单元的输入影响,也就是提取出来的结果可能是有重复的(对max pooling而言)。而且,实验表示使用 带交叠的Pooling的效果比的传统要好,在top-1和top-5上分别提高了0.4%和0.3%,在训练阶段有避免过拟合的作用。

5. 总体结构

如果说前面的ReLU、LRN、Overlapping Pooling是铺垫的话,那么它们一定是为这部分服务的。

因为这才是全文的重点!!!理解这里才是把握住这篇的论文的精华!

img

img

img

首先总体概述下:

AlexNet为8层结构,其中前5层为卷积层,后面3层为全连接层;学习参数有6千万个,神经元有650,000个
AlexNet在两个GPU上运行;
AlexNet在第2,4,5层均是前一层自己GPU内连接,第3层是与前面两层全连接,全连接是2个GPU全连接;
RPN层第1,2个卷积层后;
Max pooling层在RPN层以及第5个卷积层后。
ReLU在每个卷积层以及全连接层后。
卷积核大小数量:

conv1:96 11113(个数/长/宽/深度)

conv2:256 5548

conv3:384 33256

conv4: 384 33192

conv5: 256 33192

ReLU、双GPU运算:提高训练速度。(应用于所有卷积层和全连接层)

重叠pool池化层:提高精度,不容易产生过度拟合。(应用在第一层,第二层,第五层后面)

局部响应归一化层(LRN):提高精度。(应用在第一层和第二层后面)

Dropout:减少过度拟合。(应用在前两个全连接层)
第1层分析:

img
第一层输入数据为原始图像的2272273的图像(最开始是2242243,为后续处理方便必须进行调整),这个图像被11113(3代表深度,例如RGB的3通道)的卷积核进行卷积运算,卷积核对原始图像的每次卷积都会生成一个新的像素。卷积核的步长为4个像素,朝着横向和纵向这两个方向进行卷积。由此,会生成新的像素;(227-11)/4+1=55个像素(227个像素减去11,正好是54,即生成54个像素,再加上被减去的11也对应生成一个像素),由于第一层有96个卷积核,所以就会形成555596个像素层,系统是采用双GPU处理,因此分为2组数据:555548的像素层数据。

重叠pool池化层:这些像素层还需要经过pool运算(池化运算)的处理,池化运算的尺度由预先设定为33,运算的步长为2,则池化后的图像的尺寸为:(55-3)/2+1=27。即经过池化处理过的规模为2727*96.

局部响应归一化层(LRN):最后经过局部响应归一化处理,归一化运算的尺度为55;第一层卷积层结束后形成的图像层的规模为2727*96.分别由96个卷积核对应生成,这96层数据氛围2组,每组48个像素层,每组在独立的GPU下运算。
第2层分析:

img
第二层输入数据为第一层输出的272796的像素层(为方便后续处理,这对每幅像素层进行像素填充),分为2组像素数据,两组像素数据分别在两个不同的GPU中进行运算。每组像素数据被5548的卷积核进行卷积运算,同理按照第一层的方式进行:(27-5+22)/1+1=27个像素,一共有256个卷积核,这样也就有了2727*128两组像素层。

重叠pool池化层:同样经过池化运算,池化后的图像尺寸为(27-3)/2+1=13,即池化后像素的规模为2组1313128的像素层。

局部响应归一化层(LRN):最后经过归一化处理,分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核,共2个GPU进行运算。
第3层分析

img
第三层输入数据为第二层输出的两组1313128的像素层(为方便后续处理,这对每幅像素层进行像素填充),分为2组像素数据,两组像素数据分别在两个不同的GPU中进行运算。每组像素数据被33128的卷积核(两组,一共也就有33256)进行卷积运算,同理按照第一层的方式进行:(13-3+12)/1+1=13个像素,一共有384个卷积核,这样也就有了1313*192两组像素层。
第4层分析:

img

第四层输入数据为第三层输出的两组1313192的像素层(为方便后续处理,这对每幅像素层进行像素填充),分为2组像素数据,两组像素数据分别在两个不同的GPU中进行运算。每组像素数据被33192的卷积核进行卷积运算,同理按照第一层的方式进行:(13-3+12)/1+1=13个像素,一共有384个卷积核,这样也就有了1313*192两组像素层。
第5层分析:

img

第五层输入数据为第四层输出的两组1313192的像素层(为方便后续处理,这对每幅像素层进行像素填充),分为2组像素数据,两组像素数据分别在两个不同的GPU中进行运算。每组像素数据被33192的卷积核进行卷积运算,同理按照第一层的方式进行:(13-3+12)/1+1=13个像素,一共有256个卷积核,这样也就有了1313*128两组像素层。

重叠pool池化层:进过池化运算,池化后像素的尺寸为(13-3)/2+1=6,即池化后像素的规模变成了两组66128的像素层,共66256规模的像素层。
第6层分析:

img
第6层输入数据的尺寸是66256,采用66256尺寸的滤波器对第六层的输入数据进行卷积运算;每个66256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个66256尺寸的滤波器对输入数据进行卷积,通过4096个神经元的输出运算结果;然后通过ReLU激活函数以及dropout运算输出4096个本层的输出结果值。

很明显在第6层中,采用的滤波器的尺寸(66256)和待处理的feature map的尺寸(66256)相同,即滤波器中的每个系数只与feature map中的一个像素值相乘;而采用的滤波器的尺寸和待处理的feature map的尺寸不相同,每个滤波器的系数都会与多个feature map中像素相乘。因此第6层被称为全连接层。
第7层分析:

img
第6层输出的4096个数据与第7层的4096个神经元进行全连接,然后经由ReLU和Dropout进行处理后生成4096个数据。
第8层分析:

img

第7层输入的4096个数据与第8层的1000个神经元进行全连接,经过训练后输出被训练的数值。

6. 减少过度拟合

6.1 数据增益

增强图片数据集最简单和最常用的方法是在不改变图片核心元素(即不改变图片的分类)的前提下对图片进行一定的变换,比如在垂直和水平方向进行一定的唯一,翻转等。

AlexNet用到的第一种数据增益的方法:是原图片大小为256256中随机的提取224224的图片,以及他们水平方向的映像。

第二种数据增益的方法就是在图像中每个像素的R、G、B值上分别加上一个数,用到 方法为PCA。对于图像每个像素,增加以下量 :

img
p是主成分,lamda是特征值,alpha是N(0,0.1)高斯分布中采样得到的随机值。此方案名义上得到自然图像的重要特性,也就是说,目标是不随着光照强度和颜色而改变的。此方法降低top-1错误率1%。
6.2 Dropout

结合多个模型的预测值是减少错误的有效方法,但是对于训练时间用好几天的大型神经网络太耗费时间。Dropout是有效的模型集成学习方法,具有0.5的概率讲隐藏神经元设置输出为0。运用了这种机制的神经元不会干扰前向传递也不影响后续操作。因此当有输入的时候,神经网络采样不用的结构,但是这些结构都共享一个权重。这就减少了神经元适应的复杂性。测试时,用0.5的概率随机失活神经元。dropout减少了过拟合,也使收敛迭代次数增加一倍。

7. 学习细节

AlexNet训练采用的是随机梯度下降 (stochastic gradient descent),每批图像大小为128,动力为0.9,权重衰减为0.005,(Alexnet认为权重衰减非常重要,但是没有讲为什么)

对于权重值的更新规则如下:

img
其中i是迭代指数,v是动力变量,ε是学习率,是目标关于w、对求值的导数在第i批样例上的平均值。我们用一个均值为0、标准差为0.01的高斯分布初始化了每一层的权重。我们用常数1初始化了第二、第四和第五个卷积层以及全连接隐层的神经元偏差。该初始化通过提供带正输入的ReLU来加速学习的初级阶段。我们在其余层用常数0初始化神经元偏差。
对于所有层都使用了相等的学习率,这是在整个训练过程中手动调整的。我们遵循的启发式是,当验证误差率在当前学习率下不再提高时,就将学习率除以10。学习率初始化为0.01,在终止前降低三次。作者训练该网络时大致将这120万张图像的训练集循环了90次,在两个NVIDIA GTX 580 3GB GPU上花了五到六天。

8. 实验结果

ILSVRC2010比赛冠军方法是Sparse coding,这之后(AlexNet前)报道最好方法是SIFT+FVs。CNN方法横空出世,远超传统方法。

img

ILSVRC-2012,Alex参加比赛,获得冠军,远超第二名SIFT+FVs。

img
定量分析:

img
图3显示了卷积层学到的有频率和方向选择性的卷积核,和颜色斑点(color blob)。GPU 1 (color-agnostic)和GPU 2(color-specific)学习到的卷积核并不一样。不一样的原因是3.5中的受限连接(restricted connectivity)。

图4显示,即使目标偏离中心,也可以被识别出来,比如mite。top-5预测结果是reasonable的,比如leopard的预测的可能结果是其他类型的猫科动物。但是也存在对intended focus的模糊问题,就是网络不知道我们到底想识别图片中的什么物体,比如cherry,分类结果是dalmatian,网络显然关注的是dog。

网络最后4096-d隐藏层产生的是feature activations是另一个重要指标。如果两张图像产生欧氏距离相近的feature activation vectors,那么网络的higher levels就认为他们是相似的。使用此度量,可以实现较好的图像检索。
通过欧氏距离计算两个4096维度效率太低,可以使用自动编码压缩向量成二进制码。这比直接在原始像素上使用自动编码效果更好。因为在raw pixels上使用quto-encoder,没用到标签数据,只是检索有相似边缘模式(similar patterns of edges)的图像,却不管他们语义(semantically)上是否相似。

9.探讨

深度很重要,去掉任一层,性能都会降低。

为了简化实验,没有使用非监督预训练。但是当有足够计算能力扩大网络结构,而没增加相应数据时,非监督预训练可能会有所帮助。

虽然通过增大网络结构和增加训练时长可以改善网络,但是我们与达到人类视觉系统的时空推理能力(infero-temporal pathway of the human visual system)还相距甚远。所以,最终希望能将CNN用到视频序列分析中,视频相对静态图像有很多有用的时间结构信息。

卷積中的stride和padding

卷積神經網路(Convolutional neural network, CNN):卷積計算中的步伐(stride)和填充(padding)


卷積神經網路(Convolutional neural network, CNN)其他相關連結我也一起列上來*
*
NN-2–1 卷積神經網路(Convolutional neural network, CNN) — 卷積運算、池化運算
NN-2–2 卷積神經網路(Convolutional neural network, CNN) — CNN運算流程
NN-2–3 卷積神經網路(Convolutional neural network, CNN):卷積計算的倒傳遞推導與稀疏矩陣觀點來看卷積計算
NN-2–4 卷積神經網路(Convolutional neural network, CNN):卷積計算中的步伐(stride)和填充(padding)
NN-2–5 卷積神經網路(Convolutional neural network, CNN): 1×1卷積計算在做什麼


img

img

一般看到的卷積介紹,大概就像上圖,圖會因為你的kernel map大小做完卷積後變的更小,實際上卷積怎麼執行可以參考我之前寫的:
卷積神經網路(Convolutional neural network, CNN) — 卷積運算、池化運算

Note: (2019/01/15增加)一般卷積網路過程中,除了Input image不稱為Feature map外,中間產生的圖我們都稱之為Feature map,原因很簡單就是這些中間產生的圖都是為了「描繪出該任務所應該產生對應的特徵資料」,這也呼應Yann LeCun, Yoshua Bengio & Geoffrey Hinton寫的Deep Learning第一句話寫的「Deep learning allows computational models that are composed of multiple processing layers to learn representations of data with multiple levels of abstraction」,深度學習過程就是在學資料的特性,所以中間出來的結果都是特徵資料,在影像因為是2D,所以用Feature map來稱呼。

所以一個卷積計算基本上有幾個部份:

\1. 輸入的圖: 假設大小是W × W。
\2. Filter (kernel map)大小是 ks × ks
\3. Stride: kernel map在移動時的步伐長度 S
\4. 輸出的圖大小為 new_height × new_width

上圖的例子
\1. 輸入的圖: W × W =10 × 10。
\2. Filter (kernel map): ks × ks=3 × 3
\3. Stride: S=1
\4. 輸出的圖大小為 new_height × new_width = 8 × 8

上圖的範例產生了2個問題
\1. 是不是卷積計算後,卷積後的圖是不是就一定只能變小?
\2. 卷積計算是不是一次只能移動一格?

所以如果你有玩過deep learning的API,卷積計算部份除了基本的input和filter (kernel map)通常還有兩個參數可以調(strides, padding),這邊舉tensorflow的例子:
tf.nn.conv2d(input, filter, strides\, padding\, use_cudnn_on_gpu=None, data_format=None, name=None)

strides\padding\這兩個參數就是在解決上面說的兩個問題。


是不是卷積計算後,卷積後的圖是不是就一定只能變小?

ANS: 用zero padding

這個手法就是看你會消失多少的大小,在輸入的圖部份就給你加上0元素進去,這個手法稱為zero padding,實際作法如下圖。

img

img

此刻的卷積計算如下,這樣卷積後的圖就不會變小了。

img

img

上圖舉的例子是kernel map是3x3,假設kernel map為5x5,此刻在輸入的圖上下左右行和列都各加2行和2列的0,讓圖變成14x14,就可以了。


卷積計算是不是一次只能移動一格?

ANS: 當然不是,也可以2格3格,但此時卷積後的圖就會變的更小。

img

img

在tensorflow,padding那邊給了兩個選項「padding = ‘VALID’」和「padding = ‘SAME’」

padding = ‘VALID’ 等於最一開始敘述的卷積計算,圖根據filter大小和stride大小而變小。

公式如下: new_height = new_width = (W — F + 1) / S (结果向上取整數,假設算出來結果是4.5,取5)

剛剛的例子
filter 3x3, stride=1, 卷積後的大小: (10–3+1)/1=8
filter 3x3, stride=2, 卷積後的大小: (10–3+1)/2=4

padding = ‘SAME’,會用zero-padding的手法,讓輸入的圖不會受到kernel map的大小影響。

new_height = new_width = W / S (结果向上取整數)

剛剛的例子,filter 3x3, stride=2, 卷積後的大小: 10/2=5 (這邊我沒有做這張圖,可以自己想像一下,做法如下所述)
這邊的作法會先補zero-padding的0元素,然後在作stride=2的卷積,所以實際上是最(10+2)*(10+2)的圖做padding = ‘VALID’的事情,(12–3+1)/2=5。


Padding補充說明 (2019/01/15增加此內容)

上面介紹的公式是針對tensorflow內建的function功能(「padding = ‘VALID’」和「padding = ‘SAME’」),並不是一般算卷積後算新的feature map長寬的公式。

一般卷積後算新的feature map長寬的公式如下:

img

img

floor(1.1)=1, floor(1.6)=1

這邊跟前面差別在這邊多了一個pad參數。

對應到caffe prototxt卷積的參數會這麼寫,如下(其他模組應該是一樣可以設pad參數)

1
2
3
4
5
6
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 2
}

這代表卷積層filter數設定為32,filter的kernel size是3,步伐stride是2,pad是1。pad=1,表示圖外圈額外加1圈0,假設pad=2,圖外圈額外加2圈0,以此類推。
所以kernel size是3的時候,你希望卷積後圖的寬高不要變,pad就要設定為1
假設kernel size是5的時候,你希望卷積後圖的寬高不要變,pad就要設定為2
假設kernel size是7的時候,你希望卷積後圖的寬高不要變,pad就要設定為3

Note: 因為一般大多只會用到卷積後,Feature map寬高會依據kernel size縮小一點(「padding = ‘VALID’」)或Feature map寬高不變(「padding = ‘SAME’」),鮮少搞一些特殊的功能,比如1×1卷積還要加pad=1,這樣出來的圖會比原本大一圈,而且這一圈還全為0。
而且一般卷積網路都是希望卷積後圖越來越小(整體MACC計算量才會小),除了segmentation和一些multi-scale object detection等才會用到deconv.或是一些upsample的方法把feature map放大。
Tensorflow是提供簡單的api,你就不需要自己去算pad要設多少,直接下strin即可(如下說明),多方便阿。
**padding**: A string from: "SAME", "VALID". The type of padding algorithm to use.

456

Why does overlapped pooling help reduce overfitting in conv nets

Why does overlapped pooling help reduce overfitting in conv nets?

I am going to answer this with the pooling example given above with some modifications. Let us say we have three 1D features as given below.

[0 0 5 0 0 6 0 0 3 0 0 4 0 0]

[0 0 0 5 0 6 0 0 0 3 0 4 0 0]

[0 0 5 0 0 6 0 0 3 0 4 0 0 0]

When pooled using z=2 and s=2, all 3 features lead to the same result as obtained above, that is

[0, 5, 6, 0, 3, 4, 0]

However when we use z=3 and s=2, we get the following results respectively

[5, 5, 6, 3, 3, 4, 0]

[0, 5, 6, 0, 3, 4, 0]

[5, 5, 6, 3, 4, 4, 0]

Therefore, with overlapping pooling, we get three different results as opposed to one result when do not use overlapping. This is due to information loss when z=s which in this case leads to reduction in the amount of data available to train the network, i.e from 3 examples to 1 example. The shrinkage in the data size makes the training model overfit.

对称矩阵summary

机器学习 线性代数基础 | 5.1 最重要的矩阵:对称矩阵

5.1 最重要的矩阵:对称矩阵

在对数据进行降维与压缩的运算处理过程中,有一类矩阵扮演了极其重要的角色,那就是对称矩阵。在线性代数的理论与实践中,我们将对称矩阵称之为“最重要的”矩阵丝毫不显夸张。

对称矩阵除了“自身与转置后的结果相等”这个最浅显、基本的性质外,还拥有许多重要的高级特性。在对角化的运算讨论中,我们会发现实数对称矩阵一定能够对角化,并且能够得到一组标准正交的特征向量。同时,任意一个矩阵A同他自身的转置矩阵img)相乘都能得到一个对称矩阵,我们在本小节中就将重点关注img这类对称矩阵并细致的讨论他的特征值所具有的重要性质,这些基础知识将会为后续的高级主题打下坚实的基础,希望大家不要错过。

5.1.1 对称矩阵基本特性回顾

首先,我们简要的回顾一下在之前的章节中所介绍过的关于对称矩阵的一些重要基本特性:

如果一个矩阵S\的所有数据项都满足img)的相等关系,那么这个矩阵就被称作是一个对称矩阵。通俗的说,一个对称矩阵通过转置操作得到的结果仍然是他自身,即满足:img的运算要求。我们从这里面还可以推断出对阵矩阵S\所蕴含的一个前提条件:他必须是一个方阵。

我们还讲过,有一种获取对称矩阵的简单方法:一个矩阵乘以自己的转置矩阵,即img,其所得到的运算结果必然是一个对称矩阵,关于这个结论的证明方法也非常简单,我们简单看一下:

img

这个等式满足关于矩阵对称的基本定义。

5.1.2 实对称矩阵一定可以对角化

我们在这里只讨论实数范围内的对称矩阵问题。

在上一章的内容里我们讲过,对于一个任意的方阵,如果他的特征值两两不同,那么特征值所对应的特征向量彼此之间满足线性无关,这个方阵可以被对角化。如果方阵有相同的特征值,他很可能存在线性相关的特征向量,那么如果发生了这种情况,该方阵就不能够被对角化了。

但是,这种情况在对称矩阵身上是不会发生的。请大家牢牢记住:对于任意一个实数对称矩阵而言,他都一定可以被对角化。换句话说,对于一个对称矩阵,无论他的特征值是否重复,他的特征向量都一定满足线性无关。

在这里,具体的证明过程我们不展开,大家有兴趣可以查阅相关的资料。

5.1.3 特征向量标准正交

任意一个实对称矩阵都可以获得一组标准正交的特征向量。这可以说是对称矩阵里我认为最好的一个性质了,在这里我们用一个简单的方法来描述一下这个性质以及他的推导证明过程。

首先,实对称矩阵S\一定能够被对角化,可以被写成img)的形式,其中对角矩阵img的各元素一定均由实数构成,并且最为关键的一点是任何一个对称矩阵分解得到的特征向量矩阵都可以是标准正交矩阵。

为什么这么说呢,我们可以简单的看一个等式推导过程:

首先对矩阵S\进行矩阵分解,得到:img)。由于矩阵S\是一个对称矩阵,满足img的关系,于是有:

img

那么,想要使得上面的等式相等,我们就需要满足对应位置上的元素相等,即:img),对此我们再进一步,就可以将其整理成img)的漂亮形式。这恰恰说明了,我们此时获取的特征向量之间是满足标准正交关系的,我们可以将X\换记作正交矩阵的符号Q\,同时结合img)这个基本特性,我们就可以把实对称矩阵的对角化过程变换成更好的形式,写作:img

5.1.4 对称矩阵的分解形式

将对称矩阵S\分解成标准正交的特征向量只是其中的一种形式而已,由定义式img我们可以得知,显然,特征向量是一个方向上的向量集合,不一定非得满足长度为1的要求,但是我们仍然可以通过直觉感受到一个事实,那就是一旦把特征向量都设置为单位向量,那么会在实践的过程中收获很多简化和美好。这个在后面的几节内容里,我们会不断的感受到由此带来的巨大好处。

此时,我们知道了对称矩阵S\一定可以得到由一组标准正交特征向量所构成的特征矩阵Q\。即,矩阵Q\可以表示成:img的形式, 我们进一步将等式img)进行展开,可以得到img的完整相乘形式。

这个式子是非常重要的,接下来我们进一步将其做展开运算,将矩阵S\写成一组矩阵相加的形式,你就会发现他的精彩之处:

img

在这一组标准正交向量当中,每一个img相乘所得到的结果项都是一个秩为1并且与矩阵S\维数相等的方阵。同时他还满足方阵与方阵之间相乘的结果为0这个性质,也可以广义的理解为方阵之间满足“正交”。

最终,任意一个n阶对称矩阵S\都可以分解成n个秩1方阵乘以各自权重系数img然后相加的结果。

5.1.5 img)与img的秩

在本书前面的章节中,我们介绍过这样一个结论,对于任意一个m×n形状的矩阵A\,他的列向量中线性无关向量的个数等于其行向量中线性无关向量的个数。

换句话说,也就是任意矩阵的行秩等于列秩,即满足:img。这个结论可以从线性方程组消元化简的角度去思考,这样大家就会很容易明白了。

我们再看看矩阵A\img的秩之间的关系:

我们从零空间的角度入手去理解这个问题。即,如果方程Ax=0\和方程img)是同解方程,那么他们就拥有相同的零空间,由于A\img这两个矩阵的列的个数相等,都为 n,因此,就可以推断出他们的列空间的维数相同,均为:n***−N(A)***,换句话说,也就能够推出二者的秩相等。

好的,那就让我们按照这个思路来推进:

首先,如果满足方程Ax=0\成立,方程两边同时乘以转置矩阵img),很明显,等式img)同样能够成立。因此,我们可以说如果x\是方程Ax=0\的解,则能够推得出x\也一定是方程img的解。

那么反过来呢,如果方程img)成立,我们将方程两边同时乘以向量img),即方程img)当然也一定能够成立,我们对这个等式稍微整理一下,就可以得到img)这个更加简洁的形式,从中可以看出一定能够满足Ax=0\成立。此时,我们可以说如果x\是方程img的解,那么他一定也是方程Ax=0\的解。

于是,这个问题我们就说清楚了:方程img和方程img)是一对同解的方程,矩阵A\和矩阵img)这两个矩阵拥有相同的零空间,因此我们就解释清楚了矩阵A\img秩相等的问题。

那么同样的,我们由此不难发现也一定有矩阵img)和矩阵img)的秩相等。那么这下好了,在img这个相等关系的纽带连接下,我们就有了以下这个结论:

img

从等式中可以看出,他们的秩都是相等的。

5.1.6 img对称矩阵的正定性描述

最后,我们来聚焦一下对称矩阵特征值的问题,我们先介绍一组概念:如果一个矩阵的所有特征值都为正,我们称他是“正定的”矩阵,如果均为非负(即,最小的特征值为0),相当于结论上稍稍弱了一些,我们称之为“半正定的”矩阵,如果他含有负的特征值,那么显然,他是非正定的。

那么换句话说,对于一个对称矩阵而言,从特征值的正负性角度来看的话,他一定是正定、半正定或非正定的其中一种。

就正定性而言,一般的对称矩阵其实没有太多的特殊性,但是由任意矩阵A\乘以他的转置矩阵img)得到的对称矩阵img,则具备非常好的特殊性质。即,他的特征值一定是非负的,换句话说,他至少是半正定的。

我们简单的说明一下为什么。

我们还是从特征向量的定义式子img)入手进行分析,我们将等式两边同时乘以向量img),得到img)这个新等式,由于特征向量必须非零,所以必然存在有img)的不等关系。换句话说,此时等式img)左侧的正负性就决定了右侧img的正负性。

那么问题就来了,如果要满足正定性(或半正定性)的要求,那么就一定要满足所有的img)都为正(或非负)的要求,等价于img)的计算结果恒为正(或非负),这在img的条件下能够保证成立么?我们将其代入到等式中发现,这个是可以保证成立的:

img

此时,如果矩阵A\的各列满足线性无关,由于向量x\是非零的,因此就能够保证所有的Ax***≠0***都成立,那么就有img)恒成立。此时,对称矩阵img)所有的特征值都满足img,因此矩阵是正定的。

如果矩阵A\的各列线性相关,那么也就是说有x≠0而Ax=0\的情况存在,此时就只能保证img)(存在等于零的可能性),对称矩阵img)就存在值为0的特征值img。因此,此时的矩阵是半正定的。

那么此时就可以继续挖掘出结论:实对称矩阵中非零特征值的个数等于该矩阵的秩。这个结论非常明显:因为矩阵A\与相似对角化后的矩阵img)拥有相同的特征值,同时由于相似性可知:这两个矩阵的秩相等。而img最容易看出非零特征值的个数和秩的相等关系,从而结论得证。

我们总结一下,对称矩阵img的所有特征值都满足非负性,特别的,如果矩阵A\的列向量满足线性无关,则该矩阵是一个正定矩阵,其特征值均为正。

5.1.7 img)与img的特征值

最后,我们来看看img)和img)这两个对称矩阵的特征值满足什么样的关系。我告诉大家,这个问题的结论非常完美:img)和img拥有完全一样的非零特征值。

我们从两个方向入手进行证明:说明如果img)是矩阵img)的特征值,那么他也是矩阵img)的特征值;反过来,如果img)是矩阵img)的特征值,那么他同样也是矩阵img的特征值。

我们假设矩阵A\的维度是m×n,矩阵img)的一个非零特征值是img),对应的特征向量是x\,那么依据定义有:img),我们将等式两边同时乘以矩阵img),即满足:img)的相等关系,我们稍作整理就可以得到一个漂亮的等式:img),于是我们看出,矩阵img)的特征值仍然是img),对应的特征向量为img

那么反过来呢,证明过程也是非常简单的,已知矩阵img)的特征值img)和对应的特征向量y\,依据定义有:img)满足等式成立,两边同时乘以矩阵A\,可以得到:img)的相等关系,也是对其稍作整理,就有:img),这个过程同样说明了,如果img)是img)的特征值,那么他也一定是img的特征值。

这里,我们就给大家解释清了:img)和img这两个对称矩阵拥有完全相同的非负特征值。

5.1.8 对称矩阵的性质总结

在这一节里,我们讲解了对称矩阵的诸多重要性质和漂亮结论。他们不是零散的概念,而是可以构成一个知识网络。我在本节的最后给大家串联一下这些知识点,大家共同思考一下里面的内在关联:

对于任意的一个m×n形状的矩阵A,有如下性质:

● 矩阵A和转置矩阵img)img)相乘的结果img)img)和img)img都是对称矩阵;

● 矩阵img)img)和矩阵img)img都能够被对角化,且都可以通过矩阵分解,获得一组标准正交的特征向量;

● 矩阵img)img)和矩阵img)img)分别是n阶和m阶的方阵,一般情况下他们的维度都是不等的,但是他们的秩却一定满足相等关系,即满足:img)img的相等关系;

● 对于矩阵img)img而言,他的特征值一定都是非负的,特别的,如果矩阵A的列向量满足线性无关,那么他的特征值全部为正,即为正定矩阵;

● 矩阵img)img)和矩阵img)img拥有完全相同的非零特征值,非零特征值的个数与矩阵A的秩相等。

熟悉、掌握这五个重要结论,将会为本章后面几节的内容扫清最大的数学障碍,帮助大家更好的掌握相关的高级内容。

二叉树遍历

二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的多。

四种主要的遍历思想为:

前序遍历:根结点 —> 左子树 —> 右子树

中序遍历:左子树—> 根结点 —> 右子树

后序遍历:左子树 —> 右子树 —> 根结点

层次遍历:只需按层次遍历即可

二叉树

前序遍历:1 2 4 5 7 8 3 6

中序遍历:4 2 7 5 8 1 3 6

后序遍历:4 7 8 5 2 6 3 1

层次遍历:1 2 3 4 5 6 7 8

一、前序遍历

1)根据上文提到的遍历思路:根结点 —> 左子树 —> 右子树,很容易写出递归版本:

1
2
3
4
5
6
7
public void preOrderTraverse1(TreeNode root) {
if (root != null) {
System.out.print(root.val+" ");
preOrderTraverse1(root.left);
preOrderTraverse1(root.right);
}
}

2)现在讨论非递归的版本:
根据前序遍历的顺序,优先访问根结点,然后在访问左子树和右子树。所以,对于任意结点node,第一部分即直接访问之,之后在判断左子树是否为空,不为空时即重复上面的步骤,直到其为空。若为空,则需要访问右子树。注意,在访问过左孩子之后,需要反过来访问其右孩子,所以,需要栈这种数据结构的支持。对于任意一个结点node,具体步骤如下:

a)访问之,并把结点node入栈,当前结点置为左孩子;

b)判断结点node是否为空,若为空,则取出栈顶结点并出栈,将右孩子置为当前结点;否则重复a)步直到当前结点为空或者栈为空(可以发现栈中的结点就是为了访问右孩子才存储的)

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void preOrderTraverse2(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
TreeNode pNode = root;
while (pNode != null || !stack.isEmpty()) {
if (pNode != null) {
System.out.print(pNode.val+" ");
stack.push(pNode);
pNode = pNode.left;
} else { //pNode == null && !stack.isEmpty()
TreeNode node = stack.pop();
pNode = node.right;
}
}
}

二、中序遍历

1)根据上文提到的遍历思路:左子树 —> 根结点 —> 右子树,很容易写出递归版本:

1
2
3
4
5
6
7
public void inOrderTraverse1(TreeNode root) {
if (root != null) {
inOrderTraverse1(root.left);
System.out.print(root.val+" ");
inOrderTraverse1(root.right);
}
}

2)非递归实现,有了上面前序的解释,中序也就比较简单了,相同的道理。只不过访问的顺序移到出栈时。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void inOrderTraverse2(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
TreeNode pNode = root;
while (pNode != null || !stack.isEmpty()) {
if (pNode != null) {
stack.push(pNode);
pNode = pNode.left;
} else { //pNode == null && !stack.isEmpty()
TreeNode node = stack.pop();
System.out.print(node.val+" ");
pNode = node.right;
}
}
}

三、后序遍历

1)根据上文提到的遍历思路:左子树 —> 右子树 —> 根结点,很容易写出递归版本:

1
2
3
4
5
6
7
public void postOrderTraverse1(TreeNode root) {
if (root != null) {
postOrderTraverse1(root.left);
postOrderTraverse1(root.right);
System.out.print(root.val+" ");
}
}

2)非递归的代码,暂且不写

四、层次遍历

层次遍历的代码比较简单,只需要一个队列即可,先在队列中加入根结点。之后对于任意一个结点来说,在其出队列的时候,访问之。同时如果左孩子和右孩子有不为空的,入队列。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void levelTraverse(TreeNode root) {
if (root == null) {
return;
}
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(node.val+" ");
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}

五、深度优先遍历

其实深度遍历就是上面的前序、中序和后序。但是为了保证与广度优先遍历相照应,也写在这。代码也比较好理解,其实就是前序遍历,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
	public void depthOrderTraverse(TreeNode root) {
if (root == null) {
return;
}
LinkedList<TreeNode> stack = new LinkedList<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val+" ");
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}

Gram矩阵

Gram Matrix实际上可看做是feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。

Jupyter Notebook 在 macOS 系统上的快捷键

Jupyter Notebook 在 macOS 系统上的快捷键

通过 Anaconda 来管理 Python 的开发环境,其自带 Jupyter Notebook 。借此整理下 Jupyter NotebookmacOS 系统上常用的快捷键。

Jupyter Notebook 有两种不同的键盘输入模式。「编辑模式」允许你在单元格中键入代码或文本,并由绿色单元格边框指示;「命令模式」将键盘绑定到Notebook命令,并由带有蓝色左边距的灰色单元格边框指示。

Mac OS X 修饰键

符号 修饰键 符号 修饰键
Command Shift
Control Return
Option Space
Tab
功能 快捷键 说明
「命令模式」 Esc 蓝色的单元格
「编辑模式」 Enter 绿色的单元格
代码补全或缩进 「编辑模式」输入字母按 Tab 会补全,没有字母则缩进
向右缩进 ⌘ + ] 「编辑模式」缩进
向左缩进 ⌘ + [ 「编辑模式」解除缩进
全选 ⌘ + A 「编辑模式」
撤销 ⌘ + Z 「编辑模式」
跳到本单元开头 ⌘ + ↑ 「编辑模式」
跳到本单元末尾 ⌘ + ↓ 「编辑模式」⌘ + End 同样的功能
跳到本行的最左边/开头 ⌘ + ← 「编辑模式」
跳到本行的最右边/末尾 ⌘ + →️ 「编辑模式」
注释/撤销整行代码 ⌘ + / 「编辑模式」
运行本单元,选择下行单元 ⇧ + ↩ 「编辑模式」、「命令模式」
运行本单元 ⌃ + ↩︎ 「编辑模式」、「命令模式」
运行本单元,插入下行新单元 ⌥ + ↩ 「编辑模式」、「命令模式」
选中上一个单元 「命令模式」;「编辑模式」下可光标上移
选中下一个单元 「命令模式」;「编辑模式」下可光标下移
删除选中单元 D , D 「命令模式」下连续按两个 D 字母键
撤销删除选中单元 Z 「命令模式」下按 Z 字母键
在本单元上方插入新单元 A 「命令模式」下按 A 字母键
在本单元下方插入新单元 B 「命令模式」下按 B 字母键
剪切单元格 X 「命令模式」下按 X 字母键
复制单元格 C 「命令模式」下按 C 字母键
粘贴单元格到上方 ⇧ + V 「命令模式」
粘贴单元格到下方 V 「命令模式」下 V 字母键
更改单元格为Code Y 「命令模式」下按 Y 字母键
更改单元格为Markdown M 「命令模式」下按 M 字母键
更改单元格为Raw R 「命令模式」下按 R 字母键
更改单元格为标题Heading1 - Heading6 1 - 6 「命令模式」下按1到6数字键*
合并选中的单元格 ⇧ + M 「编辑模式」如果只有一个单元格被选中,则合并当前及以下单元格
保存当前Notebook ⌘ + S 「编辑模式」、「命令模式」或者「命令模式」下按 S 字母键
显示快捷键提示 H 「命令模式」下按 H 字母键,可自定义快捷键
中断Notebook内核 I, I 「命令模式」下连续按两个 I (interrupt) 字母键
重启Notebook内核 0, 0 「命令模式」下连续按两个0数字键

multi-view learning

多视图学习(multi-view learning)

概括:多视图学习就是360度,全方位无死角的欣赏(学习)然后得到最接近真实值的判定。

话说那么一天啊,一个人和一个蚂蚁在对话,他们看着一个米饭粒,人说,这个米饭粒胖嘟嘟的一定很香,蚂蚁说:你胡说,这米粒明明是长方形的,你干嘛说他胖嘟嘟的。然后他们就吵得面红耳赤,就去问上帝,这米究竟是什么样子的。上帝说:你们都没有错,人看到的是三维的世界,所以他们能看到立体的东西,而蚂蚁只能看到二维的,所以蚂蚁只能看到平面的。

从上面的小故事我们可以看出,多视图学习就是从多个角度去学习,然后数据进行预测提高准确性。

一 半监督学习

半监督学习问题在真实世界中大量存在,以下列举几例:

在文本分类中,例如,垃圾邮件过滤问题,所有邮件都可以作为未标记数据,标记数据的获取要求用户标注哪些是垃圾邮件,哪些不是,如果使用传统的监督学习方法,需要用户标记上千个邮件作为样本,才能使训练的学习器有较好的过滤性能,而几乎没有用户愿意花如此多的时间标记邮件,在只有少量的用户标记邮件和大量的未标记邮件的情况下,使用半监督学习方法训练垃圾邮件过滤器可能是一个好的选择。在图像处理中,例如,计算机辅助医学图像分析问题,可以从医院获得大量的医学图像作为未标记数据,但如果要求医学专家把这些图像中的病灶都标识出来,往往是不现实的,一般只能对少量医学图像中的病灶进行标识,所以需要使用半监督学习方法来减少对标记数据的需求,在自然语言处理中,例如,句法分析问题,为了训练一个好的句法分析器需要构造句子/句法树,这是一项十分耗时的工作,构造几千个句法树可能要耗费一个语言学家几年的时间,而可以作为未标记数据使用的句子是普遍存在的,考虑未标记数据的半监督学习能解决语言学家的困难,上述实例表明,随着信息技术的飞速发展,我们面临的问题是,数据大量存在,但获取数据的标记却需要耗费大量的人力物力,传统的监督学习方法在标记数据较少的情况下很难获得好的预测性能”半监督学习正是为了解决这类问题而提出,在理论和实际中都具有重要意义。

1.1多视图的半监督学习

1.1.1多视图数据

在一些实际问题中,对于同一事物可以从多种不同的途径或不同的角度对其进行描述,这多种描述构成事物的多个视图(multi view)。本文用带下标的xi表示第i个数据点,用带上标的x(t)表示数据的第i个视图,则多视图数据可表示为xi={x1x2,…,xn}其中,表示视图的个数,多视图数据在真实世界中广泛存在,以下列举几例:在网页分类问题中,既可以根据网页本身包含的信息来对网页进行分类,也可以利用链接到该网页的超链接所包含的信息来进行分类,这样,网页数据就可以用两个视图表示,刻画网页本身包含信息的特征集构成第一个视图,刻画超链接所包含信息的特征集构成第二个视图,在电视片段的识别问题中,既可以根据视频中包含的信息来进行识别,也可以根据音频中包含的信息来进行识别,所以电视数据可以用视频和音频这两个视图表示”在自然语言理解问题中,同一语义对象,可以用不同的语言来表达,这些不同的语言描述就构成了此语义对象的不同视图表示,上述示例中,多视图用于表示数据的不同特征集,多视图还可以用于表示数据的不同来源;例如对于同一个数据源,用不同的采集装置进行采集,这多个采集结果构成了数据的不同视图;另外,多视图还可以用于表示数据间的不同关系;例如,学术论文的分类问题中,论文间既有参考文献的引用关系,也有作者的合作关系,可以把不同的关系用不同的视图来表示;有一些文献涉及多模态(multimodal)学习问题,但不同的文献中模态一词的含义不同”狭义的多模态是指人的不同感官,如视觉,听觉,嗅觉!触觉等;视觉所对应的图像或文字信息,和听觉所对应的声音信息,就构成多模态数据;广义的模态数据是指对于一个事物,通过不同的方法收集到的数据”例如在人脸识别中,可能收集到人脸的2D图像和3D形状模型,这就构成人脸数据的两个模态;在指纹识别中,用不同传感器采集的一个指纹的多种不同印痕,构成指纹数据的多个模态;对比多模态数据和多视图数据的概念可以看出,多视图的含义里包含了多模态,多视图可以表示更广泛的实际问题;

1.3.2多视图数据的表示

数据的表示问题是机器学习的重点和难点问题之一,因为学习效果往往受到数据表示方法的影响。对于客观世界的对象,常常提取它的特征,然后用特征向量表示此对象,即xi={x1, x2… xn}了,其中n代表特征的个数。人们希望提取的特征体现了此对象的本质,从而能够用这些特征学习到目标概念。然而,对于一个学习问题,需要的最小特征集是不可知的,在缺乏先验信息的情况下,只能提取尽可能多的特征,提供给学习器,期望学习器能获得更好的预测性能”另外,数据收集技术的发展,使得人们可以通过更加复杂多样的手段对事物进行描述,这也导致数据的特征较多。这些描述对象的特征中,有些特征具有不同的属性,因此不适合使用同一种学习器进行学习。例如上述电视片段的识别问题中,电视片段具有视频和音频两部分特征,这两部分特征更适合分别用图像识别方法和声音识别方法来学习。如果使用单视图(即用所有特征组成一个特征向量,来表示电视片段,将无法选择一种既适合图像又适合声音的普适学习方法,在这种情况下,使用多视图的表示法较为适合,即把数据表示成多个特征集,然后在每个特征集上可以用不同的学习方法进行学习。

即使数据的特征能够使用同一种学习器进行学习,多视图学习也可能比单视图学习具有优势”例如上述网页分类问题中,网页本身所包含的信息和指向该网页的超链接所包含的信息均由单词构成,网页视图和超链接视图都可以表示成文本向量的形式,在这两个视图上可以用同一种学习器进行学习”然而,如果要把这两个视图合成一个视图,则得到的特征向量失去了原有的意义,而且可能增加了特征空间的维数,从而给学习带来不必要的困难”另外,数据的多视图表示方法还能够发挥各个视图的优势,利用未标记数据达到协同学习的目的,以改善学习性能,这一点接下来将具体介绍。

1.3.3多视图的半监督学习

在多视图的半监督学习中,一方面数据有多个视图,即x=xt,另一方面数据由标记数据集L和未标记数据集U组成,学习算法应考虑如何利用多个视图蕴含的信息和未标记数据蕴含的信息,来辅助传统的监督学习.在该领域具有代表性的算法有A.Blum和T.Mitchell提出的协同训练算法 (co一training)。该算法假设数据有两个视图,首先在两个视图上利用标记数据分别训练出一个分类器,然后,在协同训练过程中,每个分类器从未标记数据中挑选若干预测置信度较高的数据进行标记,并把标记后的数据加入另一个分类器的标记数据集中,以便对方利用这些新标记的数据进行更新,此过程不断迭代进行,直到达到某个停止条件。

img

上图展示了协同训练算法的主要思想,图中,Cl和C2分别代表两个类别的数据,用两个不同的颜色表示,X(l)和X(2)代表数据的两个不同视图,在视图X(1)中,这两个类别的数据可以被分类器很好地区别开来,而在视图X(2)中,这两个类别的数据混合分布,很难训练得到好的分类器,在这种情况下,用视图X(l)训练的分类器可以把它对未标记数据的分类结果中比较置信那些的未标记数据,连同它对那些未标记数据的分类结果,一起提供给视图X(2)上的分类器,然后,用视图x(2)训练的分类器能够利用从视图X(l)上得到的信息,排除自身的不确定性,从而提高用视图X(2)训练的分类器性能,反之亦然,多视图学习正是利用数据在不同的视图学习的难易程度不同,来发挥视图之间的相互作用,,优势互补,协同学习。自从协同训练算法被提出以后,多视图的半监督学习得到研究者的重视,涌现出了一批相关工作,并取得了很多研究以根据音频中包含的信息来进行识别,所以电视数据可以用视频和音频这两个视图表示,在自然语言理解问题中,同一语义对象,可以用不同的语言来表达,这些不同的语言描述就构成了此语义对象的不同视图表示。上述示例中,多视图用于表示数据的不同特征集,多视图还可以用于表示数据的不同来源。例如对于同一个数据源,用不同的采集装置进行采集,这多个采集结果构成了数据的不同视图。另外,多视图还可以用于表示数据间的不同关系。例如,学术论文的分类问题中,论文间既有参考文献的引用关系,也有作者的合作关系,可以把不同的关系用不同的视图来表示,有一些文献涉及多模态(multimodal)学习问题,但不同的文献中模态一词的含义不同。狭义的多模态是指人的不同感官,如视觉,听觉,嗅觉,触觉等视觉所对应的图像或文字信息,和听觉所对应的声音信息,就构成多模态数据。广义的多模态数据是指对于一个事物,通过不同的方法收集到的数据。例如在人脸识别中,可能收集到人脸的3D图像和3D形状模型,这就构成人脸数据的两个模态。在指纹识别中,用不同传感器采集的一个指纹的多种不同印痕,构成指纹数据的多个模态。对比多模态数据和多视图数据的概念可以看出,多视图的含义里包含了多模态,多视图可以表示更广泛的实际问题。

简历

FDU 李云帆 [Luke Li]

Skype +86-15821154370
Email 16302010002@fudan.edu.cn
Website http://liyunfan.fun
Fudan University 2016.09 - Expected 2021.05
Software Engineering==transferred to Data Science in 2018

Educational experience and honors

TOEFL:112; GRE:326+3.5 ; CET-6: 637

GPA: 3.25/4.0

Second author of Combined priority and path planning with a double-layer structure for multiple robots

2018 whole year, Teaching Assistant for “ Introduction to computer systems“ (adaptation of CS213)

Fall of 2018, Exchange experience at the *University of California , Santa Cruz (UCSC) *

2017.03 【Clover Software Development Innovation Competition】 Third Prize

2017.04 【* CTF Information Security Competition】 Star of the Future Award & Third Prize

Member of ****** CTF team of Fudan University, 2017-2018

2017.11, Third Prize - Fudan University Scholarship

I was the Minister of Academics of the Students' Union under department of Data Science since fall 2019.

Intern and Research Experience

Fall 2020. Research intern at Prof. Qixin Cao's RobotLab. Finished an article with Haili Wangon path planning for multi-robot scene as the second author. And is now in charge of the smart-rehabilitation-system project.

Spring 2019. Research intern at Prof. Yang Xu's Future Network Innovation Laboratory. Began to work on ways to model cache replacement algorithms to speed up simulations, to recognize request patterns and to find ways (mainly cache pollution attacks) to disrupt the locality of CDNs and corresponding countermeasures.

Fall 2017 and Spring 2018. Research intern at System Security Lab under supervision of Prof. Yuan Zhang about the topic of Javascript RFCs through vulnerable WebView component in android systems.

Summer 2017. Backend engineer internship at ChenXi studio. I helped with the development of a web app for the school that involves generating and returning user-information-related-pictures, had 600+ users.

Self-evaluation

Highly interest driven and self-motivating.

Strong learning abilities; strong sense of planning.

Pressure proof;highly resolved and self-disciplined; assiduous towards research.

Skills and Interests

Self learned CS231nand Pytorch tutorial

Excellent programing skills. Namely, proficiency in Java and Python; familiar with C++ and R, used JS and PHP before.

Currently interested in computer vision and robotics.

In-school project experience

2016.012 Programming A

Project name: the game of the arena chess

100% completion, the realization of the JavaFX-based GUI, the corresponding user mouse and keyboard operation.

2017.12 Object-Oriented Design

Project name: 2048 games

A C++ QT-based GUI2048 game, using depth search to achieve AI functionality.

2017.06 Introduction to Web Applications

Project name: Image sharing website

A web interface. PHP + MySQL as backend, frontend HTML, CSS, JavaScript, user authentication with cookies, encryption using hashing with salt.

2017.12 Data Structure and Algorithm Design

Project name: Chess AI

min-max search, alpha-beta pruning, search layer: 4.

2017.12 Computer System Foundation (2)

Project name: CLI multi-threaded chat room

thread pool monitoring message, specify ip+port to achieve message transmission.

2018.06 Software Engineering (Group Work)

Project name: Calendar Notepad

This course focuses on design patterns and code refactoring. Responsible for backend development.

2018.06 Computer Graphics

Project name: WebGL project

Draw a scene with WebGL, user keyboard event to achieve camera perspective change and omnidirectional movement, realize keyboard event control object visibility, realize keyboard event control transformation.

2018.06 Neural Network and Deep Learning (Group Work)

Project name: Chinese ancient poetry generation

Based on TensorFlow framework, using LSTM.

Fall 2018 /

exchanging in UCSC, no projects

2019.06 Distributed Systems

Project name: New York Taxi Data Analysis

Doing massive data analysis on Spark.

2019.06 Advanced Data Science

Project name: Turkish population data analysis

Doing massive data analysis on Spark. Machine learning algorithms applied.

2019.06 Artificial Intelligence (Group Work)

Project name: Gomoku on piskvorkGomoku agent implemented with MCTS

ADP & Threat-space search applied.

2019.06 Social Network Mining (Group Work)

Project name: Movie recommendation algorithms for users

Using web crawlers to gather data (from Douban) and multiple recommendation algorithms to make reasonable choices of recommendation to users.

2019.06 Statistical machine learning (Group Work)

Project name: [Kaggle] Box office prediction

Using LightGBM for prediction. [Kaggle]Project name: Bilibili Data AnalysisUsing web crawlers to gather data (from Bilibili) for Data Analysis on video uploaders.

2019.06 Financial Time Series in Data Mining (Group Work)

Project name: Residential electricity usage data analysis

Using DTW for time series classification and LSTM for time series prediction. Data from Bureau of Shanghai Electric Power.

Project name: Time series analysis on search engine searches for keyword "Big Data"

Using web crawlers to gather data (from Baidu Index) to predict future market size of the "Big Data" industry.

The courses that I have finished until now :

Course Index Course Name
Math and Physics
MATH120021 Advanced Mathematics A I
MATH120022 Advanced Mathematics A II
SOFT130039 Discrete Math I
SOFT130040 Discrete Math II
SOFT130079 Linear Algebra
PHYS120013 College Physics B I
PHYS120014 College Physics B II
PHYS120015 Fundamental Physics Experiments
English
ENGL110012 Audio-visual English
ENGL110061 Essay Writing
ENGL110066 English for Business Communication
ENGL110068 Advanced English
Programing
SOFT120001 Programming A (Java)
SOFT130002 Introduction to Web Applications (PHP+JS+HTML+CSS)
SOFT130004 Data Structure and Algorithm Design (Python)
SOFT130006 Software Engineering (Java)
SOFT130059 Object-Oriented Programming in C++
Data Mining
DATA130001 Financial Time Series in Data Mining
DATA130007 Social Network Mining
DATA130014 Advanced Data Science
Machine Learning
DATA130008 Artificial Intelligence
DATA130011 Neural Network and Deep Learning
DATA130003 Statistical machine learning
Computer System
SOFT130056 Introduction to Computer Systems I
SOFT130057 Introduction to Computer Systems II
DATA130020 Database and Implementation
DATA130015 Large-scale Distributed Systems
Statistics
DATA130005 Statistics: Principles, Methods and R (I)
DATA130004 Computational Statistics
DATA130009 Statistics: Principles, Methods and R (II)