这一篇写的很差....我会找时间慢慢补充的
在上一篇关于逻辑回归的博客中,简单介绍了逻辑回归模型,对于监督学习来说,模型可以理解为一个模块/函数,在足够的数据训练以后,通过梯度下降等手段进行拟合,最终根据输入来预测输出结果.
这一个东西,我们可以称之为神经元(初中生物)
多个神经元可以组成层(layer),最终多个层可以组成一个神经网络
神经网络和单一的逻辑回归模型一样,同样是多个数据的输入来进行训练,最后得到我们需要的结果.
相比于单一逻辑回归计算,神经网络对于高复杂度的数据有更好的训练结果展示,例如具有多个特征或者多个需求模块识别的时候,使用神经网络是更加合适的选择.
此外神经网络的自适应性很高,每个节点的权重数目可以随着特征数目而变化,可以根据输入数据的变化进行调整。这使它们能够处理不断变化的环境和数据分布。
神经网络的大致结构如下所示:
在本图中图片分为: 输入,隐藏层1,隐藏层2,隐藏层3,输出层,输出
根据输入的训练数据,对每一层的每个神经元进行梯度下降等方法训练,每一层输出维数和层中神经元数目一致的向量(不同的框架库对于向量的表示方法不一样,反正你就记着不是数组就对了)
正因为神经元数目足够多,并且结构比较复杂,像这种每个神经元都需要完全接收输入的情况(这种层称之为密集层(dense layer)),需要的训练数据比单一模型训练更加复杂和耗时.
另外每一层可以单独设置激活函数(activation function),这一点会在后面讲到.
对于神经网络来说,每一层的输入是一个向量,每一层的输出也是一个向量
细致结构如下
在这个简单的神经网络示意图中,a[2]是隐藏层2的输出结果,a[2]的特征值数目与layer2中的神经网络数目一致,一个神经元负责计算一个分量.
而在layer3中,由于本图展示的3是密集层,所以神经元都能独立完全接收到整个输入的数据a[2],神经元会根据传入的特征值的数目,自行安排权重向量w的数目.
最后再使用激活函数,对于每个神经元的输出结果做简单处理.组合成新的输出结果a[3]
(注:训练原理仍然是梯度下降)
神经网络有很多分层,像上面的称之为(Dense layer),特点是每个神经元需要获取到全部的特征值,至于具体最后的结果是否不需要某个特征值,这个是训练结果决定的.如果根据使用特征值的情况进行连线,最后的结果是这样
所以被称之为密集层.
而如果使用卷积层(reconvene),可以指定某个神经元只能读取某些特征值,举个例子,对于一张图片的读取来说,我们可以给神经元分配任务,让某些神经元只获取特定区域的信息
在上述的图片中,神经网络的最终实现结果是一个输出,比如说我们可以使用sigmoid激活函数,最终可以得到一个预测值,比如说预测一个东西是不是车,神经网络会回答你"是"/'不是'(或者说有多大概率是)
但是如果我们的输出需求可能有很多,比如判断一张图的东西是车?马?人?或者比如说数字识别,是1还是234579?这种情况下当然可以构建"神经网络森林".但是这样子训练开销增加巨大,数字只有十个,但是汉字?
并且就算使用多个神经网络,最后的计算结果,训练过程也不一样,到时候的输出结果:
1的可能性为=0.77 ,2的可能性为0.36
这不是很尴尬/
为了处理这种问题,我们可以使用一种名为softmax的多分类算法
在最后的输出层不再是单一的输出,而是根据需求设置的多个神经元数目,每个神经元代表一种可能的输出,其实思路很简单
最后一层我们也可以称之为softmax层,每一层仍然是利用到一样的方法.
然后为了实现归一化(即让所有结果的预测值可能性相加为1,我们使用特殊的激活函数)
以上就是对分类问题的处理方法.其实对于solfmax算法还有一些可以改进的乙方,这个就后续有机会再说坝
对于一些wx+b的计算结果来说,可能最终的计算结果并不符合我们的心意.
例如要预测什么东西,结果给哥们干出一个77.....
一方面是对数据进行规整化的处理,另一方面是为了让数据更加符合我们的需求,我们要对预测结果加上一个激活函数.
向上面来说,我们在softmax使用了规范化的激活函数,预测概率的基础上,让整体的结果相加为1
还有我们之前常用的sigmoid函数也是一种激活函数
此外常用的激活函数
ReLU: max(0.z)
linear: z
对于每个网络层来说,激活函数都是必不可少的,他表示了我们将以何种方式来处理最终的输出矢量,每种激活函数都有属于自己的适用场景和功能
图片识别
图片识别的本质其实是神经网络获取图片的特征,然后将根据特征值计算出这是什么东西
第一个隐藏层在图片中寻找"边角"这种特征值
第二个隐藏曾在上一层边角中寻找面部特征
第三个隐藏层在上一层的面部特征中,预测匹配的脸型