目录
系列文章目录
前言
一、误差反向传播法所需的链式法则
二、梯度下降法的含义与公式(附代码)
三、最优化问题和回归分析(附代码)
总结
系列文章目录 第一章:会思考的机器你造嘛——AI技术
?第二章:深度学习敲门砖——神经网络 ?
第三章:掌握神经网络的法宝(一)
前言 通过上一章的介绍,相信大家对于神经网络的框架模式有了一定的了解,而这一章我准备来给大家介绍一下掌握神经网络所需的数学基础。神经网络用到的算法就是向量乘法,并且广泛采用符号函数及其各种逼近。并行、容错、可以硬件实现以及自我学习特性,是神经网络的几个基本优点,也是神经网络计算方法与传统方法的区别所在。
文章图片
一、误差反向传播法所需的链式法则 1.1神经网络和复合函数
已知函数y = f(u), 当u = g(x)时,y作为x的函数库也表示为形如y = f(g(x))的嵌套结构(u和x都表示多变量)。这时,嵌套结构的函数f(g(x))称为f(u)和g(x)的复合函数。
就如我们上一章所讲到的神经单元的激活函数:y = a(w1x1+w2x2+···+wnxn+b),其中w1,w2···,wn作为各输入的权重,b为神经单元的偏置,n为输入的个数。这个输出函数是如下x1,x2,···,xn的一次函数f 和激活函数a 的复合函数:
文章图片
【深度学习|掌握神经网络的法宝(一)】1.2 单变量函数的链式法则
1)已知单变量函数y = f(u),当u表示单变量函数u = g(x),复合函数f(g(x))的导函数可以如下简单地求出来:
文章图片
2)单变量函数的近似法则:
文章图片
1.3 多变量函数的链式法则
1)变量z为u,v的函数,如果u,v分别为x,y的函数,则z为x,y的函数,此时下式(多变量的链式法则)成立:
文章图片
2)多变量函数的近似法则
文章图片
1.4 近似法则的总结和扩展
近似法则的向量表示:
文章图片
二、梯度下降法的含义与公式(附代码) 2.1 梯度下降法的思路
梯度下降法不直接求解上式的方程,而是通过慢慢地移动图像上的点进行摸索,从而找出函数的最小值:
文章图片
下面给大家一个例子让大家好理解一下:
文章图片
文章图片
2.2 近似公式和内积的关系
套用多变量函数的公式:
文章图片
可以递推为以下模式:
文章图片
2.3 向量内积的回顾
文章图片
2.4 二变量函数的梯度下降法的基本式
文章图片
2.5 将梯度下降法推广到三个变量之上的情况
文章图片
2.6 学习率的含义以及梯度下降法的要点
1)所谓梯度下降法,就是分别求损失函数对各个参数的偏导数,然后乘以一个系数η,把它作为参数的更新量。这个参数η,就称为学习率。
学习率的选择非常重要,η在梯度下降法中也叫作步长,通过控制η来控制每一步的距离:
- 如果η 过小,计算较慢,需要迭代多次;
- 如果η 过大,参数就可能在迭代的过程中“越过”最低点,来回震荡,甚至无法收敛;
文章图片
2)梯度下降法的要点:
- 不同的起始点,可能导致最后得到的局部最小值点不同。
- 每次迭代的时候,我们需要同时更新,直至所要的式子收敛,这就是梯度下降法的核心。
from random import randomdef gradient_decent(fn, partial_derivatives, n_variables, lr=0.1, max_iter=10000, tolerance = -5):
theta = [random() for _ in range(n_variables)]
y_cur = fn(*theta)
for i in range(max_iter):
#calculate gradient ofcurrent theta
gradient = [f(*theta) for f in partial_derivatives]
#updata the theta bythe gradient
for j in range(n_variables):
theta[j] -= gradient[j]*lr
#cheak if converged or not
y_cur, y_pre = fn(*theta), y_cur
if abs(y_pre-y_cur) < tolerance:
break
return theta, y_curdef f(x, y):
return (x+y-3)**2 + (x+2*y-5)**2+2
def df_dx(x, y):
return 2*(x+y-3) + 2*(x+2*y-5)
def df_dy(x, y):
return 2*(x+y-3) + 4*(x+2*y-5)if __name__ == '__main__':
print("Solve the mininum value of quadratic function:")
n_variables = 2
theta, f_theta = gradient_decent(f, [df_dx, df_dy], n_variables)
tehta = [round(x, 3) for x in theta]
print("The solution is: theta %s, f(theta) %.2f.\n" % (theta, f_theta))
运行结果:
文章图片
三、最优化问题和回归分析(附代码) 3.1 最优化问题
在为了分析数据而建立数学模型时,通常模型是由参数确定的。在数学世界中,最优化问题就是如何确定这些参数的。
而且从数学上来说,确定神经网络的参数是一个最优化问题,具体就是对神经网络的参数(即权重和偏置)进行拟合,使得神经网络的输出与实际数据相吻合。
3.2 回归分析
由多个变量组成的数据中,着眼于其中一个特定的变量,用其余的变量来届时这个特定的变量,这样的方法称为回归分析。
文章图片
文章图片
3.3 代价函数
- 在最优化方面,误差总和可以称为“误差函数”、“损失函数”、“代价函数”等;
- 除了平方误差的总和
文章图片
之外,代价函数还存在其他多种形式; - 利用平方误差的总和进行最优化的方法称为最小二乘法。
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import scipy.optimize as opt
from scipy import sparse
import numpy as np#拟合函数
def func(a, x):
k, b = a
return k*x+bdef dist(a, x, y):
return func(a, x) - yfont = FontProperties()plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.sans-serif'] = 'Droid Sans Fallback'
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = Falseplt.figure()
plt.title(u'女生的身高体重数据')
plt.xlabel(u'体重/kg')
plt.ylabel(u'身高/cm')
plt.axis([40, 80, 140, 200])
plt.grid(True)
x = np.array([48.0, 57.0, 50.0, 54.0, 64.0, 61.0, 43.0, 59.0])
y = np.array([165.0, 165.0, 157.0, 170.0, 175.0, 165.0, 155.0, 170.0])
plt.plot(x, y, 'k.')
param = [0, 0]
var = opt.leastsq(dist, param, args = (x, y))
k, b = var[0]
print(k, b)
plt.plot(x, k*x+b, 'o-')
plt.show()
拟合出来的结果:k = 0.7514124562779751; b = 124.29802113285037;
文章图片
3.5 模型参数的个数
- 回归方程是根据大量的条件所得到的折中结果;
- 要确定模型,就必须准备好规模大于参数个数的数据;
欢迎大家留言一起讨论问题~~~
推荐阅读
- 算法|近似算法的近似率_选择最佳近似最近算法的数据科学家指南
- 全面公测 | 百度智能云CCE在离线混部功能
- 游戏|2022年的GameFi会有什么变化()
- 财经|复盘2021年国内手游出海(大厂“吃饱”,中小厂商顺势“带跑”)
- 人工智能|2022年值得关注的22项新兴技术
- 人工智能|《经济学人》(2022年值得关注的22项新兴技术)
- 人工智能|下一个是什么(2022年值得关注的22项新兴技术)
- 大数据|气候科技冠上‘低碳’,泡沫就来了
- 大数据|京东商城CEO徐雷年会演讲(我们抗住风霜 业务基本面良好)