系列文章目录
第一章:会思考的机器你造嘛——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 近似公式和内积的关系
套用多变量函数的公式:![](https://img-blog.csdnimg.cn/40e5f35b05944d52ba85f8cf328ecef3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS1VVVUQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
可以递推为以下模式:
2.3 向量内积的回顾
**2.4 二变量函数的梯度下降法的基本式 **
2.5 将梯度下降法推广到三个变量之上的情况
2.6 学习率的含义以及梯度下降法的要点
1)所谓梯度下降法,就是分别求损失函数对各个参数的偏导数,然后乘以一个系数η,把它作为参数的更新量。这个参数η,就称为学习率。
** 学习率的选择非常重要,η在梯度下降法中也叫作步长**,通过控制η来控制每一步的距离:
- 如果η 过小,计算较慢,需要迭代多次;
- 如果η 过大,参数就可能在迭代的过程中“越过”最低点,来回震荡,甚至无法收敛;
2)梯度下降法的要点:
- 不同的起始点,可能导致最后得到的局部最小值点不同。
- 每次迭代的时候,我们需要同时更新,直至所要的式子收敛,这就是梯度下降法的核心。
**2.7 梯度下降法python举例 **
from random import random
def 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_cur
def 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 代价函数
- 在最优化方面,误差总和可以称为“误差函数”、“损失函数”、“代价函数”等;
- 除了平方误差的总和之外,代价函数还存在其他多种形式;
- 利用平方误差的总和进行最优化的方法称为最小二乘法。
3.4 最小二乘法的python举例
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+b
def dist(a, x, y):
return func(a, x) - y
font = 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'] = False
plt.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 模型参数的个数
- 回归方程是根据大量的条件所得到的折中结果;
- 要确定模型,就必须准备好规模大于参数个数的数据;
总结
以上就是今天要讲的内容,本文介绍了神经网络所需的数学基础,误差反向传播法所需的链式法则、梯度下降法的含义与公式以及最优化问题和回归分析的相关知识。
欢迎大家留言一起讨论问题~~~
版权归原作者 KUUUD 所有, 如有侵权,请联系我们删除。