机器学习——神经网络(前向传播)

一、概要

基本上所有的机器学习问题都能用神经网络来解决,但可能存在过拟合问题,所以能用逻辑回归解决的问题没必要用神经网络。
与其把神经网络当作一个分类或者回归算法,不如将他当成一种特征提取器,让机器更好的读懂输入的数据。

二、图像识别与神经网络

机器学习——神经网络(前向传播)_第1张图片

  • 图像在计算机中是以一个三维数组或者矩阵(例如300×100×3)的形式存储在计算机中
  • 其中300×100代表一张图片的长和宽,3代表图像的颜色通道,例如经典的RGB,此时图像就是一个彩色图。如果颜色通道数为1,也就是300×100×1,此时图像就是一个黑白图。
  • 数组中的每一个元素代表一个像素值,在0(黑)~255(白)之间变化,像素值越大,该点的亮度也越大;像素值越小,该点越暗。

图像分类任务:拿到一堆图像数据后,各有各的标签,要让计算机分辨出每张图像内容属于哪一个类别

  • 影响因素:如照射角度、光照强度、形状改变、部分遮蔽、背景混入
  • 传统算法:分析各种特征,实在是个苦活。
  • 神经网络算法:交给网络去学习,只要有数据和标签,选择合适的模型就能解决这些问题。

三、得分函数SVM

分类问题的得分函数:神经网络最终输出一个结果(例如一个分值),以评估它属于各个类别的可能性
机器学习——神经网络(前向传播)_第2张图片
输入:图像数据              输出:分类的结果。

  1. 既然图像是由很多个像素点组成的,最终它属于哪一个类别肯定也要和这些像素点联系在一起,可以把图像中的像素点当作数据特征。
  2. 输入特征确定后,接下来需要明确的就是权重参数,它会结合图像中的每一个像素点进行计算,简单来说就是从图像每一个细节入手,看看每一个像素点对最终分类结果的贡献有多大。

机器学习——神经网络(前向传播)_第3张图片
假设输入数据是32×32×3,一共就有3072个像素点,每一个都会对最终结果产生影响,但其各自的影响应当是不同的,例如猫的耳朵、眼睛部位会对最终结果是猫产生积极的影响,而一些背景因素可能会对最终结果产生负面的影响。这就需要分别对每个像素点加以计算,此时就需要3072个权重参数(和像素点个数一一对应)来控制其影响大小。

  • 如果只想得到当前的输入属于某一个特定类别的得分,只需要一组权重参数(1×3072)就足够了。那么,如果想做的是十分类问题,此时就需要十组权重参数。每组参数用于控制当前类别下每个像素点对结果作用的大小。
  • 偏置参数b,相当于微调得到的结果,让输出能够更精确。如果是十分类任务,各自类别都需要进行微调,也就是需要10个偏置参数。
  • 最终结果主要由权重参数w来控制,偏置参数b只是进行微调。

机器学习——神经网络(前向传播)_第4张图片
输入还是这张猫的图像,简单起见就做一个三分类任务,最终得到当前输入属于每一个类别的得分值。观察可以发现,权重参数和像素点之间的关系是一一对应的,有些权重参数比较大,有些比较小,并且有正有负,这就是表示模型认为该像素点在当前类别的重要程度,如果权重参数为正且比较大,就意味着这个像素点很关键,对结果是当前类别起到促进作用。
确定权重和偏置参数的数值:需要神经网络通过迭代计算逐步更新;首先随机初始化一个值,然后不断进行修正即可。

四、损失函数loss

损失函数:计算损失值,评估预测值和真实结果之间的吻合度,即模型输出的预测值与真实值Y之间不一致的程度。损失值越小,预测结果越准确;损失值越大,预测结果越不准确。
训练数据(xi,yi)是固定的,可以通过调整模型参数W和b来改进模型效果,减小损失值。
根据不同的任务类型(分类或回归)和数据集情况,可以定义不同的损失函数。例如:
机器学习——神经网络(前向传播)_第5张图片

  • Li为当前输入数据属于正确类别的得分值与其他所有错误类别得分值的差异总和。其中Δ表示容忍程度,或者说是至少正确的比错误的强多少才不计损失。
    在这里插入图片描述表示没有损失在这里插入图片描述表示开始计算损失。

下面实际计算一下。数据有3个类别:小猫、汽车和青蛙,分别选择3张图片作为输入,假设已经得到其各自得分值。

  • 小猫对应的各类得分值:f(x1,W)=[3.2,5.1,-1.7]
  • 汽车对应的各类得分值:f(x2,W)=[1.3,4.9,2.0]
  • 青蛙对应的各类得分值:f(x3,W)=[2.2,2.5,-3.1]
    机器学习——神经网络(前向传播)_第6张图片
    损失值计算
    当Δ=1时,表示正确类别需比错误类别得分高出至少1个数值才算合格,否则就会有损失值。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    从结果可以看出,第一张输入的小猫损失值为2.9,意味着做得还不够好,因为没有把小猫和汽车这两个类别区分开。第二张输入的汽车损失值为0,意味着此时模型做得还不错,成功预测到正确答案。最后一张青蛙对应的损失值为10.9,这值非常大,意味着此时模型做得很差。
    最终模型损失值的计算并不是由一张图像决定的,而是大量测试图像结果的平均值(例如一个batch数据):
    在这里插入图片描述
  1. 式(17.1)可以当作对回归任务也就是预测具体分数时的损失函数(损失函数的定义方法有很多,可以根据任务不同自己选择)。
  2. 对于分类任务来说,更希望得到一个概率值,可以借用softmax方法来完成分类任务。例如,当前的输入属于猫的概率为80%,狗的概率为20%,那么它的最终结果就是猫。
  • sofutmax分类器:
    假设一张小猫图像经过神经网络处理后得到其属于3个类别的得分值分别为(3.2,5.1,-1.7),只看得分值,感觉差异并不大。
  1. 为了使得结果差异能够更明显,进行了映射。经过映射后,数值差异更明显,如果得分值是负数,基本就是不可能的类别,映射后也就更接近于0。
    机器学习——神经网络(前向传播)_第7张图片

  2. 通过归一化操作转换成概率值 normalize

  3. 通过概率值,计算损失值loss
    机器学习——神经网络(前向传播)_第8张图片
    通过对数函数可以发现,当输入的概率结果越接近于1时,函数值越接近0,表示完全做对了(100%属于正确类别),不会产生损失。如果没有完全做对,效果越差(输入越接近于0)时,对应的损失值也会越大(虽然是负的,取其相反数就会变成正的)。

把每一步的操作穿插在一起,就是分类任务中损失函数的定义
机器学习——神经网络(前向传播)_第9张图片
损失函数中,还加入了正则化惩罚项,这一步也是必须的,因为神经网络实在太容易过拟合。

机器学习——神经网络(前向传播)_第10张图片
 1. 求出各得分值的指数次幂,结果为
 在这里插入图片描述

  1. 归一化处理,即计算出每类的(上图中log后面小括号内的部分),结果为[0.13,0.87,0.00],因为0.87较大,所以可以将该图片分类为汽车,显然,该结果是有误差的,所以要计算损失函数。

  2. 在求解损失函数时,只需要其属于正确类别的概率,本例中图片正确的分别为小猫,所以损失函数为L1=-log0.13=0.89

你可能感兴趣的:(机器学习,神经网络,机器学习)