长春火车站到吉大二院,网站上的销售怎么做的,北京到安阳的火车票时刻表查询,做壁画在哪个网站#x1f680; 在初始神经网络那一节#xff08;链接如下#xff1a;初始神经网络#xff09;的最后#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k#xff0c;当我们在想让模型更加准确的时候#xff0c;是做不到的#xff0c;因为我们… 在初始神经网络那一节链接如下初始神经网络的最后我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k当我们在想让模型更加准确的时候是做不到的因为我们使用的是线性模型liner model;接下去我们一起探索将如何进一步优化。 1线性模型也许太过于简单
由于使用的函数都是线性的所以我们不管怎么调节b和w最后得到的都仅仅只是不同的线性模型显然线性模型是不能满足要求的因为通过2017-2020年数据可知有些天数的观看人数并不是呈现一个简单的比例关系变化所以线性模型也许太过于简单了。
模型过于简单从而导致准确率提不上来这被称之为model bias 所以需要一些跟加灵活的函数。就如下图所示的红色线所示其变化趋势有的天数可能成正比有的天数可能成反比那我们该如何得到这种红色的函数呢
其实可以将红色的函数看成是constant sum of blue curve该如何理解怎么加的呢如下图所示 0号线也就是constant1号线拟合第一段2号线拟合第二段3号线拟合第三段
所以可以通过一系列的蓝色线相加来得到最后结果即最后的红色curve那又如何得到这些不同的蓝色线呢这个问题后面讲到。 所以说按道理来说对于任何一条线piecewise liner curve。我们都可以通过一系列的蓝色线条(blue curve)组合来得到可是也许有人会说那对于完全曲线类型的函数我们又该如何拟合呢
只需要在这些曲线( beyond piecewise liner curve )上取点通过两点的连线也可以很好的拟合出来曲线。
2如何去得到各种各样的蓝色线条 对于上图的蓝色函数我们都可以通过下面的函数sigomid函数来进行拟合得到只要改变不同的b和w的只值我们就可以得到不同的蓝色函数线条。
具体看下不同的b和w如何影响蓝色线的形状
不同的w可以看出来改变的是其线条的坡度不同的b是将线进行的平移不同的c是改变了线条的范围大小 所以各种各样的蓝色线可以通过sigmoid函数拟合得到而只需要将函数写成多个蓝色函数和的形式就可以得到一个比较灵活的函数而不会像liner model一样看上去那么的不可靠。 在之前我们是使用前一天的直接预测下一天的线性模型进行预测由于存在model bias 所以现在改用跟加灵活的函数
其中 x 1 x_1 x1是输入的特征也就是前一天的观看量其中 b i b_i bi c i c_i ci和 w i w_i wi都是未知参数是改变sigmoid函数的参数其中将i个sigmoid函数变换后的函数相加因为我们也具体不知道对于拟合一个函数需要几个蓝色函数相加合适其中 b b b也是未知参数用于调节整体的误差。 在这里我们再次将考虑前一天的变成考虑前三天的观看量最开始使用线性模型是 y b ∑ j w j x j yb\sum\limits_{j}w_jx_j ybj∑wjxj现在为了让这个线性模型变得更加灵活将其加到sigmoid函数中去就可以让最后拟合的结果变得十分灵活。
也许这样看这这个式子很抽象我们可以一步一步来看看他是如何进行的在进行之前我们还是需要重新回忆一下这个式子中的参数都是什么 x j x_j xj是输入的特征表示有j个特征被输入也就是有前j天的观看数据被输入 w i j w_{ij} wij为什是ij呢其中i表示第i种蓝色曲线即 w i j w_{ij} wij表示在第i种蓝色曲线下其这j种特征分别对应的权重值。 b i b_i bi和 w i j w_{ij} wij都是未知参数其真实目的是调节sigmoid函数的形状 b b b是整体函数的偏移量 对于三个特征的输入首先来计算第一条被拟合的蓝色curve ,因该是先写出其线性表达式将其放入sigmoid函数中其就会具有灵活性而拟合出来所需要的蓝色曲线先来写出其线性函数即如下 r 1 b 1 w 1 1 x 1 w 1 2 x 2 w 1 3 x 3 r_1b_1w_11x_1w_12x_2w_13x_3 r1b1w11x1w12x2w13x3再将这个这个线性函数放入sigmoid函数得到第一个蓝色curve1同样依次可以得到蓝色curve2蓝色curve3。 也就是上图所说的 a 1 a 2 a 3 a_ 1a_2a_3 a1a2a3在分别乘上 c 1 c 2 c 3 c_ 1c_2c_3 c1c2c3在将这三条蓝色curve相加再加上 b b b就得到了最后的 y y y 。
其实上面的函数可以通过矩阵的方式如下表示出来 r b w x rbwx rbwx 再将r放入sigmoid函数也就得到了使用矩阵表示的函数如下所示。
同样的我们现在仅仅是将函数的表达式给写了写了出来函数中的未知参数同样需要求解出来。
3)求解参数
求解参数这里依然采用梯度下降的方法为了求偏导和表示方便统一将参数写成一个矩阵 θ \theta θ。 其梯度下降求解的过程一样建立Loss函数对其分别求偏导梯度下降就如下图所示直到得到最优解。
4batch和epoch
我们在计算Loss的时候我们是尝试将所有已知的训练数据算一个损失然后根据这个损失函数求偏导计算偏导值然后根据偏导值决定未知参数的更新方向当开始使用batch和epoch的时候不再计算整个训练数据集的损失接着往下看他是怎么进行的。
对于一个完整的数据集将其随机分成几个等大小的数据集简称一个batch再计算Loss的时候就只将一个batch中的损失求和求偏导更新参数进行第二次参数更新的时候就选择下一个batch进行更新参数。每次使用一个batch更新一次参数称为一个updata。当看完所有batch的时候称之为一个epoch。
5神经网络和深度学习
在上面我们学习的过程中其实我们已经创造了一个神经网络其实1943年心理学家Warren McCulloch和数理逻辑学家Walter Pitts在合作的《A logical calculus of the ideas immanent in nervous activity》论文中就给出了人工神经网络的概念及人工神经元的数学模型从而开创了人工神经网络研究的时代。1949年心理学家唐纳德·赫布在《The Organization of Behavior》论文中描述了神经元学习法则。所以神经网络并不是什么新鲜的事情在1969年人工智能之父 Minsky和Seymour Papert在《感知器》Perceptrons一书里给感知器判了“死刑”这是一本非常严谨的专著影响力很大。都得到一个简单的结论神经网络都是骗人的。 神经网络网络这个名词在那个年代就好像一个臭明昭著的名词谁也不感冒所以为了发展它取了另外一个名字叫做深度学习deep learing,即如下图所示在结果输出的时候在放一层神经元使其深度变大。 在之后我们的网络深度越来越深其效果也是越来越好如下图所示 所以我们也将我们的网络叠的深一点来看其表现显然在网络在叠到三层的时候表现非常好了但是当网络叠到第四层的时候其在训练集上的损失是0.1k而在没有看过的数据上确表现的很差这是由于层数太多导致了overfitting 随着网络深度的增加会使得最后得到的结果更加准确结果更加准确是函数拟合的更加贴切深度增肌无非就是sigmoid的增加那为什么非得在深度上拓展使之变得更深而不是在宽度上拓展使其变的更宽呢