神经网络预测:神经网络预测数据

神经网络

下面这幅图是最简单的多层神经网络,它包含2层,总共由3个神经元相互连接而成。


由此图可以得知输入到输出之间的关系:
a 1 = ω 11 x 1 + ω 12 x 2 + b 1 (第一个神经元)
a 2 = ω 21 x 1 + ω 22 x 2 + b 2 (第二个神经元)
z 1 = φ ( a 1 )非线性函数)
z 2 = φ ( a 2 )(非线性函数)
y = ω 1 z 1 + ω 2 z 2 + b 3 (第三个神经元)
如果觉得太复杂,也可以用一个非常复杂的公式描述多层神经网络输入与输出的关系:
y=w1 φ(ω11 x1 +ω12 x 2 +b1)+w2 φ(ω21x1+ω22 x2 +b2 )
综上我们可以得知,需要求出的变量有9个,分别是:w11,w 12 ,w 21 , w22 ,b1 ,b2,
w1 ​ ,w2 ,​ b3
训练神经网络的过程,就是要求出这几个变量的最优解。

激活函数的作用

在此,需要强调的是两层之间的激活函数φ是必须的。为什么呢?我们可以回到刚刚的式子看看。

y=w1 φ(ω11 x1 +ω12 x 2 +b1)+w2 φ(ω21x1+ω22 x2 +b2 ),在这个式子中,若没有激活函数的话
我们可以很容易的知道:该式子实际上就是一个普普通通的线性函数,和y=wx+b没有什么区别。

因为生活中绝大部分的数据都是非线性的,因此普通的线性函数表达能力是非常差的。所以我们需要非线性的激活函数(如relu,sigmoid,tanh等等)将线性的函数转变为非线性的函数,以此增加函数的表达能力。

三层神经网络可以模拟任意的非线性函数

首先我们需要知道这个神奇的定理:三层神经网络可以模拟任意的非线性函数。

下图是三层神经网络的结构,具体算法参考二层神经网络。

简单的代码

这里,我使用一个简单的代码实现三层神经网络的预测
首先先给大伙看看数据

上图为进行训练并预测的散点图,我在这里把最后一个点(273, 81)删掉,训练前面的数据来预测最后这个点。接下来康康代码:

1.导入包库和数据


2.将数据进行标准化(标准化为-1到1),并转化为张量


3.使用pytorch进行神经网络的构建


4.设置一些超参数,可以看见:
输入层和输入层为1,隐藏层为20
使用MSE损失函数,并使用随机梯度下降优化器


5.进行一个动态训练,方便我们可以看到训练出的函数长成啥样


6.结果


由上图可以看出损失函数的值和训练出的函数的样子以及预测出来的值。由此可见,训练效果还是不错的。

备注

1.对数据一定要进行标准化,如果不进行标准化训练出的函数是一条平行的直线。
2.标准化得到的数据可以是:
(-1,1)


(0, 1)


我个人感觉(-1,1)的效果要好一点。

参考资料

浙江大学《机器学习》课程—胡浩基老师主讲
知乎博主:HUST潘潘 Pytorch搭建简单神经网络(一)——回归
知乎博主:大写的FENG 数据预处理:归一化和标准化
机器学习 周志华

以上,是本人作为一个初学者对神经网络进行预测的笔记,可能有不对的地方请海涵。

相关推荐

相关文章