写在前面:感谢北京大学软件与微电子学院的曹教授所授知识。
1.1人工智能三学派:
i. 行为主义(感知-动作控制系统,控制论)
ii. 符号主义(基于算术逻辑表达式,问题->表达式->求解表达式)
iii. 连接主义(仿生学,模拟神经元连接关系,实现感性思维)
1.2神经网络设计过程
1.2.1 神经网络的一般过程:
① 准备数据:采集大量(输入特征和标签)数据对构成数据集
② 搭建网络:搭建神经网络结构
③ 优化参数:往网络喂入数据,训练,获取最佳参数(反传)
④ 应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)
1.2.2 神经网络的具体设计
1.2.3 损失函数(以莺尾花的分类为例)
搭建网络时,会随机初始化所有参数(如wi权值,和b偏置)。
输入特征xi为莺尾花的各项数据(叶长叶宽等),输出yi分别对应莺尾花的三种分类。
输出值得分最高的就越有可能是该种类型。可此次(第一次)分类结果却不对。(输入特征对应的标签为0,可是最高得分却是1类莺尾花)
利用损失函数(loss function)【预测值(y)与标准答案(y_)的差距】,损失函数可以定量判断W、b的优劣,当损失函数输出最小时,参数W、b会出现最优值。
常用的损失函数:均方误差,表征了网络前向传播推理(结果)和标准答案之间的差距。
损失函数的梯度,表示损失函数对各参数求偏导后的向量。损失函调梯度下降的方向就是函数减小的方向。
question:【为什么要令均方误差对分量系数的偏导数等于0 ?】
answer:【为了选择最佳系数,这个最佳,可以理解为均方误差最小。而均方误差是系数的一个函数(不同系数的选择对应不同误差),要使该函数达到最小,按多元函数的理论,应该是极值,而极值的必要条件就是对该变量的偏导数等于0。】
梯度下降法:沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。
梯度下降法更新参数的计算:
学习率(lr):学习率设置过小,收敛会很慢;学习率设置过大,梯度会在最小值附近来回震荡,跳过了最小值,可能无法收敛。
反向传播:从后向前,逐层求损失函数对每层神经元参数的偏导数,迭代更新所有参数。如下图,当w= -1时,损失函数loss()的值最小。
代码实现:
Import tensorflow as tf
w = tf.Variable(tf.constant(5, dtype =tf.float32))
lr = 0.2
epoch = 40
for epoch in range(epoch): #顶层循环,表示对数据集循环epoch次
withtf.GradientTape() as tape:
loss= tf.square(w + 1)
grads= tape.gradient(loss , w)
w.assign_sub(lr* grads)
print(“After%s epoch, w is %f, loss is %f” %(epoch, w.numpy(), loss))