稀疏自动编码之神经网络

考虑一个监督学习问题,现在有一些带标签的训练样本(x(i),y(i)).神经网络就是定义一个复杂且非线性的假设hW,b(x),其中W,b 是需要拟合的参数.

下面是一个最简单的神经网络结构,只含有一个神经元,后面就用下图的形式代表一个神经元:

把神经元看作是一个计算单元,左边的x1,x2,x3 (和 截距+1 )作为计算单元的输入,输出为:,其中,函数被称为激活函数,在这里我们的激活函数是sigmoid函数:

还有一种激活函数是正切函数(tanh function):

下面是两种激活函数图像:

tanh(z)函数式sigmoid函数的变体,它的输出范围是[−1,1],而不是[ 0,1].

注意一个对后后面推导有用的等式:

对于sigmoid函数f(z) = 1 / (1 + exp( − z)),它的导函数为f‘(z) = f(z)(1 − f(z)).

神经网络模型

神经网络就是把许多神经元连接到一起,使得一个神经元的输出作为另一个神经元的输入。下面是一个小规模的神经网络:

图中同样用圆圈表示神经网络的输入(蓝色的圆圈表示整个网络的输入,红色圆圈表示神经元),截距项为+1,但是这里称为偏置节点。网络的最左边的一层叫做输入层,最右边的一层叫做输出层(输出层可以有很多神经元节点,这个例子只有一个节点)。中间的一层称为隐层,因为它们的值在训练集中观察不到。可以说图中神经网络有3个输入节点(不包括偏置节点),3个隐层节点,1个输出节点。

用 n 表示网络的层数,因此例子中 nl  = 3,用 L代表 l 层,所以 L就是输入层,  就是输出层。网络参数(W,b) = (W(1),b(1),W(2),b(2)), 表示 层的节点 l+1 层的节点 i 之间的连接权重,  表示与 l+1 层的节点 i 连接的偏置,因此,在这个例子中 . 注意偏置节点是没有输入的,因为偏置节点输出总为+1. 用 sl  表示 l 层的节点数(不计偏置节点)。

用   表示 层的节点 i 的激活值(即输出值)。当 l = 1 时,用   表示第 i 个输入。给定参数 W,b, 神经网络的假设模型 hW,b(x) 输出一个实数。计算过程如下:

接着用  表示 层的节点 i 的输入加权和(包括偏置节点),如:

,所以 .

于是上面计算过程的表示就可以更简洁地写为:

称这个过程为前向传播(forward propagation).

更为一般的是,用 a(1) = x 表示输入层的值,于是 层的激活值就是 a(l) ,计算  l + 1 层的激活值 a(l + 1)

把所有参数矩阵化,用矩阵—向量操作,可以利用线性代数的优势快速求解网络参数。

到目前为止,我们只关注了一个神经网络的例子,但是神经网络还有许多其它的结构(神经元之间的连接类型),包括多个隐层的神经网络。最常见的方式是,对于一个 nl  层的神经网络,第1层代表输入层,nl  层代表输出层,中间的每个 层与 l+1 层紧密相连。设置好以后,就可以像上述的前向反馈一样,逐层计算激活值,这就是一种前馈神经网络(feedforward neural network),因为连接中没有回路或者闭环。

神经网络可以有多个输出节点。这里给出一个含有2个隐层和2个输出节点的网络:

训练这个网络需要训练样本 (x(i),y(i)) ,. 当你需要预测多个值得时候,这种网络会很有用。例如,在医疗诊断应用中,向量 x 给出一个病人的特征,不同的输出 yi 可能分别表示不同种类的疾病是否存在。

学习来源:http://deeplearning.stanford.edu/wiki/index.php/Neural_Networks

时间: 2024-10-12 00:01:50

稀疏自动编码之神经网络的相关文章

稀疏自动编码之反向传播算法(BP)

假设给定m个训练样本的训练集,用梯度下降法训练一个神经网络,对于单个训练样本(x,y),定义该样本的损失函数: 那么整个训练集的损失函数定义如下: 第一项是所有样本的方差的均值.第二项是一个归一化项(也叫权重衰减项),该项是为了减少权连接权重的更新速度,防止过拟合. 我们的目标是最小化关于 W 和 b 的函数J(W,b). 为了训练神经网络,把每个参数 和初始化为很小的接近于0的随机值(例如随机值由正态分布Normal(0,ε2)采样得到,把 ε 设为0.01), 然后运用批量梯度下降算法进行优

稀疏自动编码之梯度检验

众所周知,反向传播算法很难调试和得到正确结果,特别是在执行过程中存在许多细小难以察觉的错误.这里介绍一种方法来确定代码中导数的计算是否正确.使用这里所述求导检验方法,可以帮助提升写正确代码的信心. 假设我们想最小化关于  的函数   . 对于这个例子,假设 ,所以 . 在一维空间,梯度下降的一次迭代公式如下: 假设我们已经实现了某个函数  去计算 ,那么梯度下降时参数更新就可以这样:. 该如何检验我们编写的函数  是正确的呢? 回忆导数的定义: 对于任意的  ,可以用如下公式来从数值上近似导数值

稀疏自动编码之自动编码器和稀疏性

到目前为止,已经叙述了神经网络的监督学习,即学习的样本都是有标签的.现在假设我们有一个没有标签的训练集,其中. 自动编码器就是一个运用了反向传播进行无监督学习的神经网络,学习的目的就是为了让输出值和输入值相等,即.下面就是一个自动编码器: 自动编码器试图学习一个函数. 换句话说,它试图逼近一个等式函数,使得该函数的输出  和输入  很近似.举一个具体的例子,假设输入  是来自一个  图像(共100个像素点)像素点的灰度值,在  层有  个隐层节点. 注意输出 . 由于隐层节点只有50个,所以网络

稀疏自动编码之练习

从10幅图像中采样出10000幅小图像块,每个小图像块大小是8*8,利用采样出的图像作为样本学习,利用LBFGS进行优化. 下面是对10幅图像白化之后的结果: train.m %% CS294A/CS294W Programming Assignment Starter Code % Instructions % ------------ % % This file contains code that helps you get started on the % programming ass

稀疏自动编码之可视化自动编码器

对于训练出的一个稀疏自动编码器,现在想看看学习出的函数到底是什么样子.对于训练一个的图像,.计算每一个隐层节点    的输出值: 我们要可视化的函数,就是这个以一副2D图像为输入,以 为参数(忽略偏置项),由隐层节点  计算出来的函数.特别是,我们把  看作是输入  的非线性特征.我们很想知道:什么样的的图像  能使得  成为最大程度的激励? 还有一个问题,就是必须对  加上约束.如果假设输入的范数约束是,可以证明,能够使得隐层神经元得到最大程度激活的像素输入   (所有100个像素点,): 展

Sparse Autoencoder稀疏自动编码

本系列文章都是关于UFLDL Tutorial的学习笔记 Neural Networks 对于一个有监督的学习问题,训练样本输入形式为(x(i),y(i)).使用神经网络我们可以找到一个复杂的非线性的假设h(x(i))可以拟合我们的数据y(i).我们先观察一个神经元的机制: 每个神经元是一个计算单元,输入为x1,x2,x3,输出为: 其中f()是激活函数,常用的激活函数是S函数: S函数的形状如下,它有一个很好的性质就是导数很方便求:f'(z) = f(z)(1 ? f(z)): 还有一个常见的

DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络

神经网络 神经网络模型 前向传播 反向传播 Neural Networds Tips and Tricks Gradient Check Regularization 激活函数 sigmoid 函数 Tanh Relu 稀疏编码 卷积神经网络 卷积 局部感知 权值共享 多通道卷积 卷积输出大小计算公式 池化pooling后的平移不变性 Dropout Learning rate AdaGrad python 实现 caffe 中的学习率 参考文献 [原创]Liu_LongPo 转载请注明出处[C

稀疏自编码器及事实上现——怎样搞基

自编码器是什么? 自编码器本身就是一种BP神经网络. 它是一种无监督学习算法. 我们都知道神经网络能够从随意精度逼近随意函数,这里我们让神经网络目标值等于输出值x,也就是模拟一个恒等函数: 太无聊了,是吗?输入等于输出,这网络有什么意义?可是.当我们把自编码神经网络增加某些限制,事情就发生了变化. 如图1所看到的,这就是一个主要的自编码神经网络.能够看到隐含层节点数量要少于输入层节点数量. 图1 举个样例,假设我们输入一张10*10的图像,这样就有100个像素,所以输入层和输出层的节点数量就是1

稀疏自编码器及其实现——如何搞基

自编码器是什么? 自编码器本身就是一种BP神经网络.它是一种无监督学习算法. 我们都知道神经网络可以从任意精度逼近任意函数,这里我们让神经网络目标值等于输出值x,也就是模拟一个恒等函数: 太无聊了,是吗?输入等于输出,这网络有什么意义?但是,当我们把自编码神经网络加入某些限制,事情就发生了变化.如图1所示,这就是一个基本的自编码神经网络,可以看到隐含层节点数量要少于输入层节点数量. 图1 举个例子,如果我们输入一张10*10的图像,这样就有100个像素,所以输入层和输出层的节点数量就是100.而