前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >莫烦Python神经网络技巧

莫烦Python神经网络技巧

作者头像
bye
发布2020-10-29 15:16:26
4360
发布2020-10-29 15:16:26
举报
文章被收录于专栏:bye漫漫求学路

一、验证神经网络

训练集70%,验证集30%

误差曲线,虽然后面误差逐步降低,但是类似于考试一样,考到90分容易,95分就很难呀。

准确度曲线,在分类问题直接看准确度曲线,在回归问题中,可以引用R2分数测量回归问题的精度,F1分数用来测量不均衡数据的精度。

正规化:很多时候模型会过拟合,过拟合类似于自负,就是把老师教的全会,出新的就不会了,解决过拟合可以通过L1\L2正规化,dropout方法。

过拟合时候一般公式y = Wx中W的值往往特别大或者特别小,那么原始的误差函数为cost = (预测值-真实值)平方,为了不让W的值变化太大,L1在误差函数后面加上了abs(W),L2中误差函数后面是W的平方,。(这样误差函数加上这个平方不是会误差值更大吗???不是很明白)

想象随机产生类似于y = a +bx的点,但类似于噪声一样,那么y = WX中,x的次数越多,整条曲线的拟合效果越好,但是这样就会过拟合了,所以,我们也要考虑w的值。

上图中蓝圈上的误差值是一样的,黄色的同理,蓝圈的最里面的圆心误差值最小,那么蓝黄的角点就是误差值最小(啥??)

 要提到另外一点是, 使用 L1 的方法, 我们很可能得到的结果是只有 theta1 的特征被保留, 所以很多人也用 l1 正规化来挑选对结果贡献最大的重要特征. 但是 l1 的结并不是稳定的. 比如用批数据训练, 每次批数据都会有稍稍不同的误差曲线。像下面:

L2 针对于这种变动, 白点的移动不会太大, 而 L1的白点则可能跳到许多不同的地方 , 因为这些地方的总误差都是差不多的. 侧面说明了 L1 解的不稳定性.

统一表达形式:

最后,为了控制这种正规化的强度, 我们会加上一个参数 lambda, 并且通过 交叉验证 cross validation 来选择比较好的 lambda. 这时, 为了统一化这类型的正规化方法, 我们还会使用 p 来代表对参数的正规化程度. 这就是这一系列正规化方法的最终的表达形式啦.其中塞塔就是w的意思。

dropout方法是在网络中随机丢失一些神经元和网络连接,让网络么有办法过度依赖W。

交叉验证:神经网络有很多参数,那么哪个参数可以更有效的解决问题,通过交叉验证,看误差值或者精确度,横坐标是网络的层数或者其他参数。

二、特征标准化

min max normalization:将所有的特征数据按比例缩放到0-1区间,有时也会-1-1区间;

standard deviation normalization:特征数据缩放为平均值为0,标准差为1

通过标准化,可以加快学习速度

三、选择好特征

可以通过展示一些特征数据各占比例等,选择具有代表性的特征,避免无用信息,避免重复的信息,避免复杂的信息

四、激励函数

relu\softmax\sigmod

y= activation function(WX)

要确保激励函数是可微的,因为反向误差传播的时候只有可微分的激励函数才可以把误差传播回去。

网络层数不是很多时候可以选择多种;

卷积推荐relu

rnn中推荐tanh或者relu

五、加速网络训练

stochastic gradient descent(SGD):将训练数据分成几批,分批放入网络中

Momentum:传统的更新网络参数是w += -learingrate*dx,整个过程会很曲折,虽然我也不明白为嘛曲折,但是下面有个图蛮直观,但是我还是不太能明白这个曲折不是很必须吗?

momentum的更新方式是m =  -learningrate*dx + b1*m,w += m;

adagraad:v += dx^2,w += -learningrate*dx/根号v;

RMSProp:

Adam:

六、处理不均衡数据

不均衡数据导致的主要问题就是A数据占比超多,B占比很少,网络只需要认为是A,就可以达到90%多的正确率。

获取更多数据;

更换评判方式:常用的就是误差、准确度等,但在不均衡数据这个并不准确。通过confusion matrix(混淆矩阵)来计算precision和recall,然后通过计算F1 SCORE,给出更好的评判分数;

重组数据,重组成均衡的数据,砍掉一部分或者合成一部分或者复制一部分;

用其他机器学习方法:决策树、dexision trees不会受到不均衡数据的影响。

修改算法;

七、批标准化

x的值为0.1,但weight的值为1的时候经过tanh激励函数趋近于0.1,weight的值为20的时候,经过激活函数变为0.96,后面x如果扩大也只会经过激励函数变成趋近于1,也就是说比x大的和x都一样,都是趋近于1,就是说没啥区别了,那就有点恐怖了,当然,比x小的还是会正常哒,那就需要对数据做个处理啦,处理成能够正常在正常数据范围内的就可以啦,那就是神器batch normalization!!!!

一般放在全连接的后面激活函数的前面

batch normalization不仅normalization了还反normalization了

公式的最后面有个反标准化,这里将标准化的数据进行在扩展和平移,让神经网络自己学者修改伽马γ和β,琢磨出前面的标准化到底有木有起到优化的作用,(这个地方不太明白,咋看出来的)如果没有,就用γ和β抵消一些标准化的操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档