行业资讯 分类
【入门】神经网络的最优化过程发布日期:2024-04-07 浏览次数:

就是寻找参数W,能够使得损失函数值最小。(简略,非数学上的定义)

1、找到目标函数(知道目标函数是什么,是cross-entropy或者其它的损失函数,都行)
2、找到一个能让目标函数最优化的方法(梯度下降)(当梯度下降应用到神经网络时,会与机器学习的梯度下降不太一样,比如加入链式法则,反向传播算法如何应对比较大的深层/浅层神经网络)
3、利用这个方法求解
当梯度下降到了神经网络,就不再是凸函数了,也不会是下图右边的碗状,而是“地形图”:
在这里插入图片描述

这节内容需要用到高等数学:导数等知识。链式法则则符合函数求导。反向传播即将结果+链式法则的这个过程。
一些常用的函数及其导数:
在这里插入图片描述

前向传播过程:
在这里插入图片描述
1、函数表达式
2、预测
3、确定损失函数
假设有两个特征,那么前向传播如下图所示:
在这里插入图片描述

反向传播:利用链式法则进行求导,更新权重参数的过程。
计算J关于Z的导数的计算公式:
在这里插入图片描述

逻辑回归前向与反向传播简单计算的代码实现

假设简单的模型为 y = sigmoid(w1x1+w2x2+b),我们一开始给几个随机的输入值和权重,带入来计算一遍。其中,在点x1,x2=(-1,-2)时,目标值为1,假设一个初始化w1,w2,b=(2,-3,-3)。用代码实现上述过程:

 

通过结果可以看到,只是进行了一次梯度下降的循环,损失函数就能减少这么多,也就是一直朝着我们所希望的方向进行发展。

向量化的实现

上述的情况都是一个样本,那么当我们有很多样本(m个)的时候,伪代码如下:

 

这是一个可行的方法2,但是会存在缺陷:在实际中,我们有成上千万个样本,都要进行for循环来计算吗?我们需要充分利用计算机CPU并行处理的优点,在python的numpy包中,有很多方便的工具,可以去菜鸟教程查看,就不一一演示了。

这里使用一些数据集以向量化的形式进行实现,数据集放在百度网盘:
链接: https://pan.baidu.com/s/1UL5FOZ7K8-yPcpt_kx8hfA
密码: 6pdr
下面的代码为自定义的模型和数据处理流程,有些内容和API里封装的不一样,当然可以往下面的模型中增加更多的内容来丰富一下结果。(比如更改梯度下降方式,增加可视化损失函数)
先大概说明一下代码思路:
1、主函数部分:
加载数据集,并且对数据集进行处理,调用模型进行训练以及预测
2、模型部分:

  • 1)初始化参数
  • 2)进行参数优化(放在自定义优化函数optimize下)
  • 3)进行预测
  • 4)返回损失、权重、打印出预测信息等。
    其中:
  • 1、自定义优化函数optimize:
    进行前向传播+反向传播(由propagate函数完成),返回的是权重参数和损失,也可以自定义返回内容。
  • 2、propagate函数:
    进行矩阵运算,并且将矩阵运算结果通过Sigmoid函数映射,然后计算损失,返回的是梯度和损失。

代码如下:

 

结果:
在这里插入图片描述
可以看出来损失结果由最初的0.01变到最后的0.004,在训练集上达到93%的准确率。由于我们是使用了单个神经元,就能达到测试集73%,如果使用更多神经元,再加上防止过拟合机制,那么这个模型会更好。

要熟悉一下内容:
1、链式法则优化
2、梯度下降
3、向量化计算


平台注册入口