非线性假设(Non-linear hypothesis)
当初始特征数 很大的时候, 将高阶多项式项包括到特征里将导致特征空间的急剧膨胀, 此时通过增加特征数来建立非线性分类器不是一个好的算法.
以计算机视觉中一个汽车分类问题为例子
我们从源图像中选取两个像素点的灰度值作为特征, 在坐标系中标出样本对应的坐标(+ 表示汽车样本; - 表示非汽车样本).
显然我们根本不知道要用哪两个像素点, 事实上我们可能需要用到所有的像素点.
假设源图像的规格都是 5050, 这已经很小了, 但依然包含2500个像素点, 仅二次项特征就有 个, 由此可见简单逻辑回归**算法在问题规模较大时并不适用.
神经元与大脑
- 神经网络(Neural network)算法
这是一种古老的算法, 它受到生物学启发, 旨在制造模拟大脑的机器. 得益于计算机运算能力的提高, 曾经由于计算量过于复杂而沉寂的大规模神经网络重拾人们的关注.
- “one learning algorithm”假说
是否存在一种算法, 可以像人脑一样, 能够学习处理各种信息, 无论是视觉, 听觉, 触觉还是其他等等?
支持证据:神经重接实验
大脑的皮层可以分为很多部分, 专门处理某中信息. 比如耳朵接收听觉信号, 传递给听觉皮层处理.
在这个实验中, 科学家将动物大脑的神经重新连接, 让耳朵跟听觉皮层断开, 最终使得眼睛经由视觉神经传递的信号传递到听觉皮层,.
实验的结果是听觉皮层将学会”看”, 对躯体感觉皮层做一个相同的实验, 那么躯体感觉皮层也将学着处理视觉信息
此外,其他人造的传感器将信息接入大脑, 它也能够学着去处理, 通过一张图片来看几个例子
模型展示
神经元生物模型
神经元有许多称为树突的输入通道, 有一条称为轴突的输出通道
神经元之间通过微弱电流(动作电位)相互传递信息
神经元逻辑模型
以此为原型, 我们设计了神经元的逻辑模型: 这些神经元接收一些特征作为输入, 根据自身的学习模型提供一个输出, 下图展示了一个以逻辑回归为学习模型的神经元. 它用到了sigmoid(logistic)函数作为它的激活函数(activation function)
在神经网络的术语中, 参数(parameter) 又被称为权重*(weight)神经网络(neural network)
一组神经元及其连接关系的集合构成了神经网络
第一层被称为输入层(input layer), 我们在这里输入特征
最后一层被称为输出层(output layer), 输出最终的计算结果
中间的其他层被称为隐藏层(hidden layers)%7D#card=math&code=a_i%5E%7B%28j%29%7D) 表示第 层的第 个神经元的激活项[1]
表示第 层中神经元的数量, 不包括偏置单元[2]
%7D#card=math&code=%5CTheta%5E%7B%28j%29%7D) 表示一个#card=math&code=s_%7Bj%2B1%7D%2A%28s_j%2B1%29) 的矩阵, 用于描述从第 层到第 映射关系
前向传播(Forward propagation)
下图展示了输入的特征是如何一步步从左向右传递, 最终计算出输出结果的, 这个过程被称为前向传播. 我们在右侧进行了向量化(Vectorized implementation), 好让整个过程更加清晰, 其中第一层的 向量与 %7D#card=math&code=a%5E%7B%281%29%7D) 等价.神经网络学习的特点
现在我们把第一层遮起来, 这个神经网络模型看起来就像是逻辑回归, 但是略有不同的是输入逻辑回归的特征是通过隐藏层 %7D#card=math&code=a%5E%7B%282%29%7D) 计算得到的数值.
概括说来, 神经网络没有直接用输入特征 %7D%20%3D%20%5Ba_1%5E%7B(1)%7D%2C%20a_2%5E%7B(1)%7D%2C%20a_3%5E%7B(1)%7D%5D#card=math&code=a%5E%7B%281%29%7D%20%3D%20%5Ba_1%5E%7B%281%29%7D%2C%20a_2%5E%7B%281%29%7D%2C%20a_3%5E%7B%281%29%7D%5D) 来训练逻辑回归, 而是自己训练逻辑回归
例子和直觉理解
- AND 运算
通过神经网络完成一个 AND 运算, 可以视为一个分类问题
增加一个偏置单元(bias unit), 其值恒为 1, 输出层的学习模型采用 函数. %7D%3D%5B-30%2C%2010%2C%2010%5D#card=math&code=%5CTheta%5E%7B%281%29%7D%3D%5B-30%2C%2010%2C%2010%5D)那么最终的输出结果就有%3Dg(-30%2B20x1%2B20x_2)#card=math&code=h%5Ctheta%28x%29%3Dg%28-30%2B20x_1%2B20x_2%29)
同时 函数有以下性质
时, %3C0.01#card=math&code=sigmoid%28x%29%3C0.01) , 即%5Capprox0#card=math&code=sigmoid%28x%29%5Capprox0) ;在 时, %3C0.01#card=math&code=1-sigmoid%28x%29%3C0.01), 即%5Capprox1#card=math&code=sigmoid%28x%29%5Capprox1)
因此根据最终输出层的值, 就可以很显然地对 0/1 两种答案情况进行分类
OR 运算
完成 OR 运算的神经网络架构一致, 只需要改变一下描述映射关系的矩阵, 学习模型仍采用 函数NOT 运算
再来看一个 NOT 运算的例子, 输入层只需要一个神经元加一个偏置单元(NOT ) AND (NOT )
将 NOT 运算 和 AND 运算组合起来XNOR
来看稍复杂的同或运算 XNOR 的例子, XNOR 可以由上述运算组合而来XNOR = ( AND ) OR ( NOT AND NOT )
因此, 我们可以用两个神经元分别完成 ( AND ) 的计算和( NOT AND NOT ) 的计算, 在下一层中再完成一步 OR 运算
从下图的右上角的样本分布可以显然看出, 这个稍微复杂的例子需要一个非线性的决策边界, 但运用神经网络的层次结构我们可以将问题分解为已经解决过的子问题, 由此可以一定程度上感受到神经网络模型在解决复杂非线性问题时的优势.
- 手写数字分类(Handwritten digit classification)
神经网络早期应用于邮政系统, 来识别邮编的手写数字以对邮件进行分类. 在视频中可以看出识别准确率相当不错
多元分类(Multi-class classification)
在逻辑回归中我们已经学过了用一对多算法(one-vs-all/rest)实现多元分类的, 那么用神经网络又要如何实现多元分类呢? 本质上这是一种对一对多法的拓展
- 多个输出单元(Multiple output units)
之前的例子中, 输出层都只含有一个神经元. 在多元分类中, 需要将输出层拓展为一个多维向量, 各个神经元的值分别代表对应类的概率
我们的训练集(Training set)格式也要发生一些改变