神经网络读书笔记

机器学习读书笔记

一、理解机器学习

​ 机器学习就是依据你的数据(包括输入和标签)然后得到训练的模型(对参数的训练),并用此模型在以后进行预测。机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程。

1、定义

img

​ 从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

​ “数据为王”的思想:数据越多,最后机器学习生成的模型预测的效果越好。

2、范围

​ 机器学习跟模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系

3、方法

①回归算法(线性回归和逻辑回归)

​ 线性回归就是求解出一条线满足所有的数据,例如“最小二乘法”,使所有误差的平方和最小,最小二乘法将最优问题转化为求函数极值问题,这种方法计算不会求导。另一方法梯度下降法是最有效的方法。

补充:梯度下降法

​ 梯度下降不一定找到的是全局最优解,可能是局部最优解,但当损失函数是凸函数的时候就是全局最优解。

  1. 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度;

  2. 特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0),第一个样本输出为y(0);

  3. 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,…m),可以采用拟合函数如下:
    在这里插入图片描述
    即hθ(x)=θ0+θ1x,其中θ0,θ1为假设值,会经过后期训练得到最终结果;

  4. 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,…m),采用线性回归,损失函数为
    在这里插入图片描述

​ 其中xi表示第i个样本特征,yi表示第i个样本对应的输出,hθ(xi)为假设函数。

​ 梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:

a.批量梯度下降(Batch Gradient Descent,BGD)

​ 它是指每一次迭代时使用所有样本来进行梯度的更新。过程如下:

​ (1)对目标函数求偏导:

在这里插入图片描述

​ (2)每次迭代对参数进行更新:

在这里插入图片描述

优点:
  (1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  (2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。

缺点:
  (1)当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

b.随机梯度下降(Stochastic Gradient Descent,SGD)

​ 随机梯度下降是每次迭代使用一个样本对参数进行更新,使得训练速度加快。对于一个样本的目标函数为:
在这里插入图片描述

​ (1)对目标函数求导:

在这里插入图片描述
​ (2)参数更新:

在这里插入图片描述

优点:
  (1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。

缺点:
  (1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
  (2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
  (3)不易于并行实现。

c.小批量梯度下降(Mini-Batch Gradient Descent, MBGD)

​ 思想是每次迭代使用batch_size个样本来对参数进行更新

优点:
  (1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
  (2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
  (3)可实现并行化。
缺点:
  (1)batch_size的不当选择可能会带来一些问题。

​ 在合理地范围内,增大batch_size的好处:
  a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
  b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  盲目增大batch_size的坏处:
  a. 内存利用率提高了,但是内存容量可能撑不住了。
  b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化

#############补充结束###############

​ 线性回归是数值问题,预测的是结果是数字,逻辑回归属于分类算法,预测结果是离散的分类,在实现上是将线性回归的数值结果转换成了0至1之间的概率。回归算法一般用于二分类的问题,一般分界线是线性的效果较为理想。

②神经网络

​ 神经网络结构图:

在这里插入图片描述

  1. 设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;

  2. 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;

  3. 结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。

    a.单层神经网络(感知器)

在这里插入图片描述
a1,a2,a3为输入单元,w为需要训练的权值,感知机只有两层,分别是输入层和输出层,但是感知机只能做简单的线性分类任务。

b.两层神经网络(多层感知器)

​ 单层神经网络无法解决异或问题,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。

在这里插入图片描述
​ 偏置节点:它本质上是一个只含有存储功能,且存储值永远为1的单元。在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元,偏置单元与 后一层的所有节点都有连接,我们设这些参数数值为向量b,称之为偏置,如下图:

在这里插入图片描述
于是神经网络的矩阵运算如下: g(W(1) * a(1) + b(1)) = a(2);

​ g(W(2) * a(2) + b(2)) = z;

​ 效果:面对复杂的非线性分类任务,两层(带一个隐藏层)神经网络可以分类的很好。两层神经网络通过两层的线性模型模拟了数据内真实的非线性函数。因此,多层的神经网络的本质就是复杂函数拟合。在设计一个神经网络时,输入层的节点数需要与特征的维度匹配,输出层的节点数要与目标的维度匹配。而中间层的节点数,却是由设计者指定的。因此,“自由”把握在设计者的手中。但是,节点数设置的多少,却会影响到整个模型的效果。如何决定这个自由层的节点数呢?目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。

​ 机器学习模型训练的目的,就是使得参数尽可能的与真实的模型逼近,样本的预测目标为yp,真实目标为y,loss(损失)值为:loss = (yp - y)^2,目标是所有训练数据的损失和尽可能的小。如何优化参数,一般就用梯度下降法。

c.多层神经网络(深度学习)

​ 与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词–“深度学习”。

在这里插入图片描述

​ 关于z的推导公式:g(W(1) * a(1)) = a(2);

​ g(W(2) * a(2)) = a(3);

​ g(W(3) * a(3)) = z;

​ 激活函数:在单层神经网络时,我们使用的激活函数是sgn函数。到了两层神经网络时,我们使用的最多的是sigmoid函数。而到了多层神经网络时,通过一系列的研究发现,ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。因此,目前在深度学习中,最流行的非线性函数是ReLU函数。ReLU函数不是传统的非线性函数,而是分段线性函数。其表达式非常简单,就是y=max(x,0)。简而言之,在x大于0,输出就是输入,而在x小于0时,输出就保持为0。这种函数的设计启发来自于生物神经元对于激励的线性响应,以及当低于某个阈值后就不再响应的模拟。

​ 更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

关于神经网络发展的对比:

在这里插入图片描述

1)卷积神经网络(convolutional neural networks)

​ 文本的分布式表示:词向量,每个词表达成 n 维稠密、连续的实数向量,是训练语言模型的一个附加产物。CNN真正能做的,只是起到一个特征提取器的作用。

卷积计算层:就是对应相乘

img

蓝色部分为输入矩阵,红色部分为3*3的卷积核,绿色部分为卷积结果,即对应相乘再相加的结果。

激励层:把卷积层输出结果做非线性映射

​ CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱。

池化层:池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合

  1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

  2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

  3. 在一定程度上防止过拟合,更方便优化。

    img

    池化就是找到每个小窗口的最大的那个数

    全连接层:两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部

    卷积神经网络之优缺点
    优点
      • 共享卷积核,对高维数据处理无压力
      • 无需手动选取特征,训练好权重,即得特征分类效果好
    缺点
      • 需要调参,需要大样本量,训练最好要GPU
      • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

    2)循环神经网络( Recurrent Neural Networks)

    ​ 就是一个单元结构重复使用,循环神经网络可以将过去时刻发生的状态信息传递给当前时刻的计算中,结构如下:

    这里写图片描述

    ​ RNN定义:St=f(U∗Xt+W∗St−1)

    ​ 输出:ot=softmax(VSt)

    • xt是第t层的输入,它可以是一个词的one-hot向量,也可以是Distributed Representation向量。
    • st是第t层的隐藏状态,它负责整个神经网络的记忆功能。st由上一层的隐藏状态和本层的输入共同决定,st=f(U*xt+Wst−1),f通常是个非线性的激活函数,比如tanh或ReLU,由于每一层的st都会向后一直传递,所以理论上st能够捕获到前面每一层发生的事情(但实际中太长的依赖很难训练)。
    • ot是第t层的输出,比如我们预测下一个词是什么时,ot就是一个长度为V的向量,V是所有词的总数,ot[i]表示下一个词是wi的概率。我们用softmax函数对这些概率进行归一化,ot=softmax(Vst)
    • 值得一提的是,每一层的参数U,W,V都是共享的,这样极大地缩小了参数空间。
    • 每一层并不一定都得有输入和输出,隐藏单元才是RNN的必备武器。比如对句子进行情感分析时只需要最后一层给一个输出即可。

③SVM(支持向量机)

​ 先从二分类讲起,数据点用 x 来表示,这是一个 n 维向量,而类别用 y 来表示,可以取 1 或者 -1 ,分别代表两个不同的类,一个线性分类器就是要在 n 维的数据空间中找到一个超平面,其方程可以表示为:wTx+b=0。我们令 f(x)=wTx+b ,显然,如果 f(x)=0 ,那么 x 是位于超平面上的点。我们不妨要求对于所有满足 f(x)<0 的点,其对应的 y 等于 -1 ,而 f(x)>0 则对应 y=1 的数据点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值