TensorFlow(三)神经网络基本概念

绪论 

根据上面介绍的神经网络,也许或=会感觉神经网络很简单,但是呢只是一个神经元的神经网络,同时省略了许多地方,下面来了解神经网络的更多内容。

一、算法基础

1.梯度下降法 

梯度下降法

在第二篇中使用了梯度下降法,但是未能了解是什么,下面来体会它的作用与优缺点:

关于梯度下降法更多的相关原理推导自行查找,这里给出一部分:

                              

                             

我们使用梯度下降法来解决一个问题,体会它的优点与缺点,有两组数据 找到合适的权重使  diff = (theta0 * x[i][0] + theta1 * x[i][1] + theta2 * x[i][2]) - y[i] = 0  

x = [(2,0,3),(1,0,3),(1,1,3),(1,4,2),(1,2,4)]
y = [5,6,8,10,11]  

x = [(2,0,3),(1,0,3),(1,1,3),(1,4,2),(1,2,4)]
y = [5,6,8,10,11]

epsilon = 0.00002 #两次预测值误差的差值小于这个值判定为收敛

alpha = 0.02 #学习率
diff = 0#预测值和真实值差距
error0 = 0
error1 = 0
cnt = 0#迭代次数
m = len(x)#测试数据数量

theta0 = 0
theta1 = 0
theta2 = 0

while True:
    cnt += 1
    
    for i in range(m):
        diff = (theta0 * x[i][0] + theta1 * x[i][1] + theta2 * x[i][2]) - y[i]#计算误差
        theta0 -= alpha * diff * x[i][0]
        theta1 -= alpha * diff * x[i][1]
        theta2 -= alpha * diff * x[i][2]
        
    error1 = 0
    for lp in range(m):
        error1 += 0.5*(y[lp] - (theta0 * x[lp][0] + theta1 * x[lp][1] + theta2 * x[lp][2]))**2 #计算均方误差
        print('error0:%f,error1:%f'%(error0,error1))
    if abs(error1 - error0) < epsilon:
        break
    else:
        error0 = error1
    
print('theta0:%f,theta1:%f,theta2:%f'%(theta0,theta1,theta2))
print('迭代次数:%d' % cnt)
print('------------------------Result-----------------------')
print('real:[5,6,8,10,11]')
print('forecast:')
print('y1 = %f '%(theta0 * x[0][0] + theta1 * x[0][1] + theta2 * x[0][2]))
print('y2 = %f '%(theta0 * x[1][0] + theta1 * x[1][1] + theta2 * x[1][2]))
print('y3 = %f '%(theta0 * x[2][0] + theta1 * x[2][1] + theta2 * x[2][2]))
print('y4 = %f '%(theta0 * x[3][0] + theta1 * x[3][1] + theta2 * x[3][2]))
print('y5 = %f '%(theta0 * x[4][0] + theta1 * x[4][1] + theta2 * x[4][2]))

可以看到最终的预测值,和真实值有一定的差距,我们可以调整epselion来提高收敛的要求,使之迭代更多的次数更加逼近真实值。 

                               

但是我们可以看到随着迭代次数的上升,搜索几乎停滞不前,这与我们的数据样本较少有较大关系也与梯度下降法天生的缺陷有关

 

                              

                              

得到梯度下降法的缺点:

1.靠近极小值时收敛速度减慢

2.直线搜索时可能会产生一些问题

3.需要很大的数据量,不停的迭代使之达到全局最优解

2.最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

这一知识不做过多解释 因为属于高中数学应该搞明白的地方 较为简单

二、激活函数与代价函数

1.激活函数

由于此前的神经元 都是线性组成 同时输出与输入的关系是阶跃函数 为了使神经网络更好的拟合 于是引入激活函数 将神经元模型更新为

                                               

也就是将从原来的阶跃函数 改为一个连续的曲线函数

                                          

常用的激活函数有

               

以及更多的激活函数

                    

关于选取哪一种激活函数,要根据学习的对象来具体决定。

2.代价函数

代价函数用来估计误差 计算误差的方法 直接使用两个值相减也许不是最佳的方法 就像在不同的数据时 你是使用平均数 中位数 还是众数一样

下面来介绍几种代价函数

            

                     

三、神经网络的理解

1.前馈

                  

          

2.本质

  由于直接使用 复杂的数学函数 来建立数学模型 很难求解也很难建立 因此使用神经网络 使用很多简单的函数 但其实本质可以认为是一个多元函数 。 同时神经网络 更像是许多简单的线性函数 互相嵌套的多元函数 但是引入代价函数 激活函数 能够更好的拟合曲线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值