八、神经网络

一、为啥要有神经网络?

在前面的几篇博客中,很容易知道我们处理的都是线性的数据,例如:线性回归和逻辑回归,都是线性的算法
但是,实际上日常生活中所遇到的数据或者问题绝大多数还是非线性的
一般面对非线性数据,我们可以采用多项式回归进行处理,详细内容可以参考博文:五、线性回归和多项式回归实现
说白了就是改变横纵坐标,是得数据线性化。例如:工资和年龄呈抛物线关系,但是工资和年龄的平方则呈线性关系,此时就可以将年龄的平方作为变量进行线性处理。

神经网络是非线性的算法!!!
为啥捏?
在这里插入图片描述
举个栗子:
当你传入x1,x2,x3三个数据时,对应三个权重参数,代入求和,即得到Σ,这一步是线性的,得到z
关键点来了!!!f为激活函数,这个函数很关键,因为它不是线性函数!!!
常用的激活函数有很多,这里假设使用的激活函数为sigmoid函数,将求和的值代入sigmoid函数中得y,由于激活函数是非线性的,z是线性的,代入得到的最终的结果y肯定是非线性的!!!
故称神经网络是非线性的算法。

神经网络是非线性的算法可以解决实际生活中的非线性数据所带来的一系列问题,故有需求才会有存在。

想当年Google的alphago大战李世石,就是用的神经网络。程序员搬了14台服务器组成一个集群,前三局alphago赢了,但是第四局的时候输了,这时候程序员喊暂停,说要调整参数,调整参数,这么多权重你知道调啥?神经网络里面的隐藏层都是黑盒子,闹呢?实际上他们应该是初始化参数,用一开始的模型参数,alphago为啥第四局会输?主要是学习过拟合了。alphago一边和李世石下棋一边会去学习,重新更新权重参数。此时程序员初始化模型,后几局alphago取得胜利。

二、常见的激活函数

1,Sigmoid激活函数

在这里插入图片描述
在这里插入图片描述

2,Tanh / 双曲正切激活函数

在这里插入图片描述
在这里插入图片描述

3,ReLU 激活函数

在这里插入图片描述
在这里插入图片描述

4,ELU激活函数

在这里插入图片描述在这里插入图片描述

5,PReLU(Parametric ReLU)激活函数

在这里插入图片描述
在这里插入图片描述

6,Softmax激活函数

在这里插入图片描述

在这里插入图片描述

四、隐藏层的含义

大年初一,你去上别人家房顶感叹人生,最后房顶塌了,伤到人了,你看你老妈会不会打你就完事了
大年初一,你去上自家房顶摘菜帮老妈做家务,你再看看你会不会挨打

大年初二,你闲着没事玩火,还口嗨,我饮酒点孤灯,最后造成火灾伤到其他人了,你看你老妈会不会打你就完事了
大年初二,你玩火去帮老妈做饭,你再看看你会不会挨打

大年初三,你又闲了,拿起家里面的菜刀跑出去,来寻找你的青春,最后脑子抽筋伤到人了,你觉得你妈会不会揍你
大年初三,你动刀帮老妈做饭,再看看你会不会挨打
在这里插入图片描述
这里的隐藏层的作用就起到了推理演绎的作用,让机器更加容易的进行判断。
隐藏层越多,模型的推理演绎越多,也就是模型想的越多,预测结果也就会越准。

五、神经网络相关概念

机器学习–拟人

有监督的机器学习:
多元线性回归===回归/预测
逻辑回归===分类

神经网络(仿生)===预测
神经网络是非线性的算法,非线性的算法可以来解决更加复杂的问题
神经网络算法也是后面深度学习的时候的基础,例如:
ANN artificial neural network
MLP multiple layer percepton
CNN 卷积神经网络
RNN 循环神经网络
… …

Ⅰ,神经网络需要考虑的基本要素有哪些?

答:1,激活函数的选择。对应神经元里面的逻辑,包括两部分,相乘相加(Σ)和非线性的变化(f激活函数),相乘相加是固定不变的;非线性的变化(f激活函数)可以有很多选择,根据效果来
2,网络拓扑结构。处理更加复杂的问题,就需要更多的网络层,就需要每层上面设置更多的人工神经元
3,在去求解神经网络模型(w0,w1,w2…wn)的时候,选择什么样优化算法,SGD一样适用!

Ⅱ,激活函数有哪些?

答:1,Sigmoid函数,0到1之间 2,Tangent函数,-1到1之间 3,Relu函数,max(0,x)

Ⅲ,神经网络算法的隐藏层意义何在?

答:1,如果有隐藏层的话,就多了推理有演绎的能力
2,每多一个隐藏层,推理和演绎的过程更多,考虑的更深入
3,隐藏层的隐藏节点如果比之前的层上面的节点数要多,相当于进行了升维,考虑的因素更多,考虑的更全面
4,隐藏层的隐藏节点如果比之前的层上面的节点数要少,相当于进行了降维,去前面进行了归纳总结

六、项目实战

训练一个两次隐藏层(5个、2个),来进行训练,最后判断输入的结果是0还是1

from sklearn.neural_network import MLPClassifier

#训练集参数
X = [[0., 0.], [1., 1.]]#输入层有两个输入节点
y = [0, 1]#输出层只有一个输出节点
"""
solver='sgd'                优化算法,这里使用的是随机梯度下降法
alpha=1e-5                  梯度下降那个系数,表示步长
activation='logistic'       激活函数,这里使用的是sigmoid函数
hidden_layer_sizes=(5, 2)   两层隐藏层,分别是5个和2个
max_iter=2000               最大迭代次数
tol=1e-4                    阈值,迭代终止条件
"""
clf = MLPClassifier(solver='sgd', alpha=1e-5, activation='logistic', hidden_layer_sizes=(5, 2), max_iter=2000, tol=1e-4)
clf.fit(X, y)

#测试集参数
predicted_value = clf.predict([[2., 2.], [-1., -2.]])
print(predicted_value)
predicted_proba = clf.predict_proba([[2., 2.], [-1., -2.]])
print(predicted_proba)

print([coef.shape for coef in clf.coefs_])
print([coef for coef in clf.coefs_])

输出结果:

"""
[1 1]
[[0.42020492 0.57979508]
 [0.41408929 0.58591071]]
[(2, 5), (5, 2), (2, 1)]
[array([[ 0.08530062, -0.52124089, -0.29367687,  0.07361264,  0.02156327],
       [ 0.46945464,  0.22892193,  0.15913923, -0.52165397,  0.44346639]]), array([[-0.02538695,  0.02746434],
       [-0.12493617,  0.2892428 ],
       [-0.34109646,  0.05022483],
       [ 0.02789934, -0.49890685],
       [ 0.35519161,  0.46174166]]), array([[ 0.31453746],
       [-0.4271511 ]])]
       """

网络模型如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/124594765
今日推荐