【AI初识境】如何增加深度学习模型的泛化能力

MedSAM:深度学习通用医学影像分割模型,更快、更准确地自动识别诊断疾病 具有更高的准确性和可靠性。通过深度学习技术,MedSAM能够从这些数据中学习并识别出各种模式,从而在复杂的医学影像中准确地识别出病变区域。因此,MedSAM是一个强大的医学影像分割工具,它能够为医生提供更快速、更准确的诊断支持,并且具有广泛的应用前景。MedSAM是一款基于深度学习的医学影像分割工具,它能够自动识别和描绘医学影像中的重要区域,如肿瘤或其他组织的病变。该工具通过学习大量医学影像和对应的掩模(即正确的分割结果),能够处理各种不同的医学影像和复杂情况,从而帮助医生更快、更准确地诊断疾病。 阅读详情

这是专栏《AI初识境》的第9篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。

今天来说说深度学习中的generalization问题,也就是泛化和正则化有关的内容。

 作者&编辑 | 言有三

1 什么是generalization

机器学习方法训练出来一个模型,希望它不仅仅是对于已知的数据(训练集)性能表现良好,对于未知的数据(测试集)也应该表现良好,也就是具有良好的generalization能力,这就是泛化能力。测试集的误差,也被称为泛化误差。


举个例子来说,我们在ImageNet上面训练分类模型,希望这个模型也能正确地分类我们自己拍摄的照片。


在机器学习中,泛化能力的好坏,最直观表现出来的就是模型的过拟合(overfitting)与欠拟合(underfitting)。


过拟合和欠拟合是用于描述模型在训练过程中的两种状态,一般来说,训练会是这样的一个曲线。下面的training error,generalization error分别是训练集和测试集的误差。

640?wx_fmt=png

训练刚开始的时候,模型还在学习过程中,训练集和测试集的性能都比较差,这个时候,模型还没有学习到知识,处于欠拟合状态,曲线落在underfitting zone,随着训练的进行,训练误差和测试误差都下降。


随着模型的进一步训练,在训练集上表现的越来越好,终于在突破一个点之后,训练集的误差下降,测试集的误差上升了,这个时候就进入了过拟合区间overfitting zone。


不过也不是说什么训练过程,都会满足上面的曲线。

(1) 模型训练过程中,训练集的误差一定一直低于测试集吗?未必。

如果这两个集合本来就取自于同样的数据分布,比如从一个数据集中随机采样,那么有可能测试的误差从一开始就低于训练集。不过,总体的趋势肯定是不变的,两者从一开始慢慢下降直到最后过拟合,训练集的误差低于测试集。

(2) 模型的训练一定会过拟合吗?这也不一定!

如果数据集足够大,很可能模型的能力不够始终都不会过拟合。另一方面,有很多的方法可以阻止,或者减缓模型的过拟合,比如正则化,这就是下面第二部分要说的。

2 什么是Regularization 

Regularization即正则化,它本是代数几何中的一个概念,我们不说因为说不好。放到机器学习里面来说,所谓正则化,它的目标就是要同时让经验风险和模型复杂度较小。

640?wx_fmt=png

以上是我们的优化目标,V就是损失函数,它表示的是当输入xi预测输出为f(xi),而真实标签为yi时,应该给出多大的损失。那么我们不禁要问,有这一项不就行了吗?为什么还需要后面的那一项呢?R(f)又是什么呢?

这就是回到上面的泛化误差和过拟合的问题了,一个机器学习系统,学习的是从输入到输出的关系,只要一个模型足够复杂,它是不是可以记住所有的训练集合样本之间的映射,代价就是模型复杂,带来的副作用就是没见过的只是略有不同的样本可能表现地就很差,就像下面这张图,只是更改了一个像素,预测就从Dog变成了Cat。

640?wx_fmt=png

造成这种情况的问题就是学的太过,参数拟合的太好以致于超过了前面那个训练曲线的最低泛化误差临界点,究其根本原因是模型的表达能力足够强大到过拟合数据集。

式子中的R(f),正是为了约束模型的表达能力,f是模型,R是一个跟模型复杂度相关的函数,单调递增。

有同学可能会说,模型的表达能力跟模型大小,也就是参数量有关,限制模型的表达能力不是应该去调整模型大小吗?这里咱们从另一个角度来看模型的能力问题。

如果我们限制一层神经网络的参数只能为0或者1,它的表达能力肯定不如不做限制,所以同样的参数量,模型的表达能力与参数本身也有关系,正则项就可以在参数上做文章。

所以说正则化就用于提高模型的泛化能力,这里所说的仅仅是狭义上的参数正则化,而广义上的正则化方法众多,第3部分进行介绍。

正则化的最终目标用一句土话来说,就是让网络学的不要太死,否则变成僵硬的书呆子。

3 正则化方法有哪些

正则化方法,根据具体的使用策略不同,有直接提供正则化约束的参数正则化方法如L1/L2正则化,以及通过工程上的技巧来实现更低泛化误差的方法,比如训练提前终止和模型集成,我将其称为经验正则化,也有不直接提供约束的隐式正则化方法如数据增强等,下面就从这三类进行讲述。


1、经验正则化方法

这里主要包含两种方法,即提前终止和模型集成。

(1) 提前终止


前面我们看的训练曲线随着不断迭代训练误差不断减少,但是泛化误差减少后开始增长。假如我们在泛化误差指标不再提升后,提前结束训练,也是一种正则化方法,这大概是最简单的方法了。

(2) 模型集成

另一种方法就是模型集成(ensemable),也就是通过训练多个模型来完成该任务,它可以是不同网络结构,不同的初始化方法,不同的数据集训练的模型,也可以是用不同的测试图片处理方法,总之,采用多个模型进行投票的策略。

在这一类方法中,有一个非常有名的方法,即Dropout。

Dropout在2014年被H提出后在深度学习模型的训练中被广泛使用。它在训练过程中,随机的丢弃一部分输入,此时丢弃部分对应的参数不会更新。所谓的丢弃,其实就是让激活函数的输出为0。结构示意图如下。

640?wx_fmt=png

因而,对于一个有n个节点的神经网络,有了dropout后,就可以看做是2^n个模型的集合了,使用的时候当然不能用2^n个模型来进行推理,而是采用了近似方法,即在使用的时候不进行权重丢弃。根据丢弃比例的不同,在测试的时候会给输出乘以相应的系数,比如某一层在训练的时候只保留50%的权重,在测试的时候是需要用到所有参数的,这个时候就给该层的权重乘以0.5。

关于dropout的有效性,从结构上来说,它消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强了泛化能力。不过也有另外的一些研究从数据增强的角度来思考这个问题。


那么,就真的不担心dropout会把一些非常重要的神经元删除吗?最新的神经科学的研究以及DeepMind等研究人员通过对神经元进行随机删除来研究网络性能,发现虽然某些神经元确实很重要,它们会选择性激活特定输入,比如只对输入猫图特别敏感,对其他输入则完全不感冒,但是删除这一类神经元仍然不影响网络能识别到猫。


这说明网络中未必少了谁就不行。不过反过来,上面说到的单个像素的攻击,则说明又有某些神经元至关重要。关于这其中的关系,仍然是研究热门,还是不断跟进更多最新的研究吧。

640?wx_fmt=png


总之一句话,不怕删了谁。就dropout的使用方法而言,我们平常只更改dropout的比例,作者对此还有更多的建议。


(1) 因为dropout降低了模型的性能,所以对于原本需要容量为N的网络才能解决的问题,现在需要N/p,p就是保留该节点的概率,这个概率通常在0.5~0.9之间,p=1就是普通的网络了。

(2) 因为dropout相当于增加了噪声,造成梯度的损失,所以需要使用更大的学习率和动量项。与此同时,对权重进行max-norm等权重约束方法,使其不超过某个值。

(3) 训练更久,很好理解。

对dropout方法,还有很多的变种,包括dropout connect,maxout,stochastic depth等。

一个神经元的输出实际上是由输入以及参数来共同决定,dropout把神经元的值设置为0了,那是不是也可以把参数设置为0呢?这就是drop connect,而且它可以比dropout更加灵活,可视为Dropout的一般化形式,从模型集成的角度来看,Dropout是2^n个模型的平均,那DropConnect呢?它应该更多,因为权重连接的数目比节点数本身更多,所以DropConnect模型平均能力更强。

Drop Connect和Dropout均引入了稀疏性,不同之处在于Drop Connect引入的是权重的稀疏而不是层的输出向量的稀疏。

另外,在dropout这一个思路上做相关文章的还有一些,比如maxout,是一种激活函数,它对N个输入选择最大的作为激活输出。比如随机pooling,是一种池化方法。比如stochastic depth,它用在带有残差结构的网络中,将某些res block直接设置为等价映射。还有backdrop,在前向的时候不drop,在梯度反传的时候才做。

在这里不禁想给大家提两个问题


(1) 你还能想到多少种drop方法?想不到就等我们下次专门说。

(2) dropout应该怎么跟其他的方法结合,比如batch normalization,会强强联合得到更好的结果吗?

2、参数正则化方法

L2/L1正则化方法,就是最常用的正则化方法,它直接来自于传统的机器学习。

L2正则化方法如下:

640?wx_fmt=png

L1正则化方法如下:

640?wx_fmt=png

那它们俩有什么区别呢?最流行的一种解释方法来自于模式识别和机器学习经典书籍,下面就是书中的图。

640?wx_fmt=jpeg

这么来看上面的那张图,参数空间(w1,w2)是一个二维平面,蓝色部分是一个平方损失函数,黄色部分是正则项。

蓝色的那个圈,中心的点其实代表的就是损失函数最优的点,而同心圆则代表不同的参数相同的损失,可见随着圆的扩大,损失增大。黄色的区域也类似,周边的红色线表示的是损失相同点的轮廓。

正则项的红色轮廓线示平方损失的蓝色轮廓线总要相交,才能使得两者加起来的损失最小,两者的所占区域的相对大小,是由权重因子决定的。不管怎么说,它们总有一个交叉点。

对于L2正则化,它的交点会使得w1或者w2的某一个维度特别小,而L1正则化则会使得w1或者w2的某一个维度等于0,因此获得所谓的稀疏化。

在深度学习框架中,大家比起L1范数,更钟爱L2范数,因为它更加平滑和稳定。

3、隐式正则化方法

前面说了两种正则化方法,第一种,通过对网络结构的修改或者在使用方法上进行调整。第二种,直接对损失函数做了修改。这两种方法,其实都应该算作显式的正则化方法,因为在做这件事的过程中, 我们是有意识地知道自己在做正则化。


但是还有另一种正则化方法,它是隐式的正则化方法,并非有意识地直接去做正则化,却甚至能够取得更好的效果,这便是数据有关的操作,包括归一化方法和数据增强,扰乱标签。


关于数据增强的方法,我们以前已经有过几期文章讲述,从有监督方法到无监督方法。关于归一化方法,以batch normalization为代表,我们以前也详细地讲过。参考链接就放这里了,大家自取。

【AI初识境】深度学习模型中的Normalization,你懂了多少?

【技术综述】深度学习中的数据增强(下)

[综述类] 一文道尽深度学习中的数据增强方法(上)

实验表明,隐式的方法比显式的方法更强,从batch normalization的使用替换掉了dropout,以及数据扩增碾压一切trick就可以看出。另外,批量随机梯度算法本身,也可以算是一种隐式的正则化方法,它随机选择批量样本而不是整个数据集,与上面的dropout方法其实也有异曲同工之妙。


这么看来,其实data dependent方法更好,咱们前面的几期都说过,不要闷着头设计,从数据中学习才是王道。

4 深度学习泛化能力到底好不好

你说深度学习的泛化能力是强还是不强,感觉完全可以打一架。

一方面,深度学习方法已经在各行各业落地,说泛化能力不好谁都不信,都已经经得起工业界的考验。关于如何定量的衡量泛化能力,目前从模型复杂度的角度有一些指标,可以参考[1]。

但是另一方面,有许多的研究[2-3]都表明,仅仅是对图像作出小的改动,甚至是一个像素的改动,都会导致那些强大的网络性能的急剧下降,这种不靠谱又让人心慌,在实际应用的过程中,笔者也一直遇到这样的问题,比如下图微小的平移操作对输出概率的严重影响,真的挺常见。

640?wx_fmt=png

正则化方法可以完美解决吗?甚至最强的数据增强方法能做的都是有限的,一个网络可以记忆住样本和它的随机标签[4],做什么正则化都没有作用。说起来神经网络一直在力求增强各种不变性,但是却往往搞不定偏移,尺度缩放。这就是为什么在刷比赛的时候,仅仅是对图像采用不同的crop策略,就能胜过任何其他方法的原因,从这一点来说,是一件非常没有意思的事情。

或许,关于正则化,再等等吧。


参考文献

[1] Neyshabur B, Bhojanapalli S, Mcallester D A, et al. Exploring Generalization in Deep Learning[J]. neural information processing systems, 2017: 5947-5956.

[2] Su J, Vargas D V, Sakurai K, et al. One Pixel Attack for Fooling Deep Neural Networks[J]. IEEE Transactions on Evolutionary Computation, 2019: 1-1.

[3] Azulay A, Weiss Y. Why do deep convolutional networks generalize so poorly to small image transformations[J]. arXiv: Computer Vision and Pattern Recognition, 2018.

[4] Zhang C, Bengio S, Hardt M, et al. Understanding deep learning requires rethinking generalization[J]. international conference on learning representations, 2017.


2019年有三AI培养计划已经开始,一个季度一期,系统性进阶为深度学习算法工程师,不妨看看。

重新解释“季”划 & 为什么我不是在搞培训

总结

深度学习基础理论部分就到此结束了,我们讲述了激活机制,参数初始化,归一化机制,池化机制,最优化方法,以及正则化,这些都对模型的性能和训练有影响,希望大家能够掌握基础知识。在我们的下一个境界,将回过头来继续看它们,以及更复杂的东西。

下一期预告:深度学习中的评测方法

转载文章请后台联系

侵权必究

更多请关注知乎专栏《有三AI学院》

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

往期精选

想要变身”AI专家“,就戳戳手指关注我们吧

别忘了点“好看”支持作者噢  ??? 

大模型学习篇(一):初识大模型 初识大模型,了解什么是语言模型,以及大模型和小模型的区别。 阅读详情

相关推荐

Materials Studio实战技巧(八)——利用片段库高效构建有机金属配合物

本文详细介绍了在Materials Studio中利用Fragment Browser(片段浏览器)高效构建有机金属配合物的实战技巧。通过调用预置的Metal Templates和Ligands库,用户可以快速搭建如茂金属催化剂等复杂分子骨架,并利用对称性操作精确控制Meso与Rac构型。文章还涵盖了自定义片段库的创建与使用,能显著提升建模效率,适用于计算化学与材料模拟领域的研究者。

wine的专栏 938

模型的泛化能力--正则化

1.https://www.jianshu.com/p/ecb531b1ab8f

weixin_43143419的博客 1万+

别再只画GO图了!用R语言+Perl脚本搞定单细胞KEGG富集分析与圈图(附完整代码)

本文详细介绍了如何利用R语言和Perl脚本实现单细胞KEGG富集分析全流程,从基因ID转换到专业圈图可视化。通过对比KEGG与GO分析的互补价值,提供完整的代码实现和优化技巧,帮助研究者高效完成单细胞测序数据的通路分析,并生成高质量的圈图展示结果。

weixin_28694169的博客 405

深度学习:模型的泛化能力浅显理解

深度学习:模型的泛化能力浅显理解通俗易懂的浅显理解 通俗易懂的浅显理解 模型的泛化能力通俗易懂的说就是模型在测试集(其中的数据模型以前没有见过)中的表现,也就是模型举一反三的能力,但是这些数据必须满足与iid(独立同分布)并在同一个分布中。 举个例子:一张图片模型之前没有见过,但是这张图片与TrainDataSet在同一分布,并满足iid,模型可以很好的预测这张图,这就是模型的泛化,在测试集中,模型预测新数据的准确率越高,就可以说是模型的泛化能力越好。 ...

Hanze的博客 8775

Zemax操作--2(单透镜和双胶合透镜优化)

单透镜 要求 镜头数据里面的数量变化后要重新设计优化函数 设计 一、初始参数 按照要求输入波长、入瞳孔径、视场数据编辑器如图 物面--透镜前表面--透镜后表面--相面(镜头数据再插入一个面如图) 将2面曲率半径F数设置为10,zemax自动给出合适值 设置面2的边缘光线高度,zemax自动给出合适值 二、评价参数设置 将面1曲率半径设置为变量 再设置评价函数告诉zemax我们需要什么条件,评价函数默认即可 执行优化 双胶合透镜 要求 ...

lzy750750的博客 1万+

天池长期赛:二手车价格预测(422方案分享)

本次比赛是一次很好的锻炼数据挖掘能力的入门赛,从EDA-数据清洗-特征工程-模型调参-模型融合,能够完整的学习到大数据的分析和挖掘,值得历练。

weixin_46685991的博客 1万+

深度多任务学习及其在医学影像分析中的应用

最近发现了很多之前阅读文献做的一点小记录或者组会汇报做的概要记录等一些杂七杂八的文献阅读笔记,想了想可以整理一下发出来,和更多的人有一个更好的交流。 文章目录1.引言2. 深度多任务学习3. 应用3.1 视神经头外观指标量化3.2 阿尔兹海默症患病临床评分预测3.3 婴儿神经发育预测4. 总结参考文献 1.引言 本文主要介绍了三篇基于医学影像的深度多任务学习论文,分别是中南大学赵荣昌等人在2020年发表在期刊 Medical image analysis 上的《Multi-indices quantific

永远想不起来更新的博客 3275

本地化搭建DeepSeek+RAGFlow,构建个人知识库

本地化搭建DeepSeek+RAGFlow,构建个人知识库。至少32G以上内存、500G以上空余磁盘空间。

gogospecter的专栏 7431

机器学习实战教程(九):模型泛化

模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中,我们通常会将已有的数据集划分为训练集和测试集,使用训练集训练模型,然后使用测试集来评估模型的性能。模型在训练集上表现得好,并不一定能在测试集或实际应用中表现得好。因此,我们需要保证模型具有良好的泛化能力,才能确保其在实际场景中的效果。为了提高模型的泛化能力,我们通常需要采取一系列措施,例如增加数据集的大小、特征选择、特征缩放、正则化、交叉验证等。通过这些方法可以减少模型的过拟合,提高对新数据的预测能力。

liaomin416100569的专栏 7683

Ubuntu零基础入门到精通【1.2讲】:Ubuntu 与 Linux 的关系 —— 你用的到底是什么?

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 3394

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​

文章首发于微信公众号《有三AI》 【AI初识境】如何增加深度学习模型的泛化能力 这是专栏《AI初识境》的第9篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 今天来说说深度学习中的generalization问题,也就是泛化和正则化有关的内容。 作者&编辑| 言有三 1 什么是generalization 机器学习方法训练出来一个模型,希望它不仅...

hacker_long的专栏 1762

Vue3 - [兼容PC和手机H5] 详细监听浏览器刷新 / 关闭 / 前进后退事件,用户点击关闭和刷新页面前 “拦截“ 操作并弹出提示框(实时监听用户关闭或刷新网页,触发时文字提醒并执行自定义操作)

vue3监听页面关闭和刷新,vue3中如何监听页面刷新和关闭事件,vue3中监听浏览器窗口关闭事件,并在窗口关闭进行操作,vue3怎么只在某个页面监听,其他页面不监听,vue3监听刷新和关闭怎么离开页面时注销释放,vue3怎么阻止浏览器前进和后退并提示,页面跳转离开后依旧可以监听到刷新和关闭,vue3怎么知道用户关闭了网页,vue3如何监听刷新网页操作并截断,vue3移动端手机h5网页手机网站监听浏览器刷新关闭,vue3当页面关闭或刷新时怎么提示用户离开不保存数据,vue3项目监听浏览器窗口或标签页关闭,并

🏆 前端领域优质创作者 1万+

「AI初识境」如何增加深度学习模型的泛化能力

https://www.toutiao.com/a6694764857343869454/ 2019-05-25 09:06:50 这是专栏《AI初识境》的第9篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 今天来说说深度学习中的generalization问题,也就是泛化和正则化有关的内容。 作者&编辑 | 言有三 1 什么是generalizatio...

喜欢打酱油的老鸟 1709

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【AI初识境】深度学习模型中的Normalization,你懂了多少?

文章首发于微信公众号《有三AI》 【AI初识境】深度学习模型中的Normalization,你懂了多少? 这是《AI初识境》第6篇,这次我们说说Normalization。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是BatchNormalization等技术非常流行的原因,它使得可以使用更大的学习率更稳定地进行梯度传...

hacker_long的专栏 1331

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

AI修行三十篇文章到不惑,已经掌握了什么,接下来还要说什么

文/编辑 | 言有三AI修行之路系列文章是有三AI的代表性作品,共分为5个系列,分别是AI白身境,AI初识境,AI不惑境,AI有识境,不可知。其中前4个系列我们会推出对应...

hacker_long的专栏 571

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【硬核科技】转行AI,从零出发

文/编辑 | 言有三AI修行之路系列文章是有三AI的代表性作品,共分为5个系列,分别是AI白身境,AI初识境,AI不惑境,AI有识境,不可知。其中前4个系列我们会推出对应...

湾区人工智能 308

「AI初识境」被Hinton,DeepMind和斯坦福嫌弃的池化到底是什么?

https://www.toutiao.com/a6694763453334159880/ 这是专栏《AI初识境》的第8篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 今天来说说深度学习中的池化问题,包含池化的种类,作用机制以及最新的思考。 作者&编辑 | 言有三 1 池化还要不要了 这一次咱们反着来,说说学术界对池化的最新观点。通常我们认为,池化可以增...

喜欢打酱油的老鸟 597

模型训练 —— AI算法初识

AI算法中模型训练的主要目的是为了让机器学习算法从给定的标注数据中学习规律、特征和模式,并通过调整模型内部参数,使模型能够对未见过的数据进行准确预测或决策。具体来说:1. **拟合数据**:模型通过训练来识别输入数据(如图像、文本、声音等)与输出结果之间的关系,以最小化预测值与真实值之间的差异(即误差)。2. **泛化能力**:训练过程中不仅要求模型在训练集上表现良好,更要确保模型能对未知的新数据样本产生良好的预测效果,这就是模型的泛化能力。

初心不忘产学研的博客 2801

「AI初识境」深度学习模型中的Normalization,你懂了多少?

https://www.toutiao.com/a6694436118189834765/ 这是《AI初识境》第6篇,这次我们说说Normalization。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是Batch Normalization等技术非常流行的原因,它使得可以使用更大的学习率更稳定地进行梯度传播,甚至增...

喜欢打酱油的老鸟 762

初识AI大模型之AI大模型常见名词介绍

1.1.1 AI 人工智能AI,人工智能(Artificial Intelligence),是使计算机或机器能够执行通常需要人类智能的任务的能力。这些任务包括学习、推理、问题解决、感知、理解语言和适应新情况等。AI的应用范围广泛,从简单的任务自动化到复杂的决策支持系统,影响到多个领域,如医疗、金融、自动驾驶、自主机器人等。智能的构成:学习:从数据中获取知识或技能,通常涉及机器学习算法。推理:基于已知信息得出新结论,通过逻辑推理或规则推导。

2401_85325726的博客 2179

初识大模型—大模型与通用人工智能

大模型(Large Model),也被称为基础模型(Foundation Model),是指具有大规模参数和复杂计算结构的机器学习模型. 这些模型通常由深度神经网络构建而成,拥有从数百万到数十亿甚至数千亿个参数. 其设计目的是为了提高模型的表达能力和预测性能,使它们能够处理更加复杂的任务和数据.1. 规模庞大:大模型的核心在于其庞大的规模,这不仅体现在参数数量上,还涉及模型的深度和宽度. 这种规模使得大模型能够捕捉到数据中极其细微的模式,从而在处理复杂任务时表现出色.

qq_32931337的博客 1487

【AI大模型】 大模型扫盲系列——初识大模型

大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。本文讨论的大模型将以平时指向比较多的大语言模型为例来进行相关介绍。

AUG2468的博客 2002

【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?

这是专栏《AI初识境》的第8篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。今天来说说深度学习中的池化问题,包含池化的种类,作用机制以及最新的思考。作...

hacker_long的专栏 621

<深度学习初识>——《深度学习》

深度学习通识及知识框架总结。

m0_57859086的博客 1358

batch normalization_【AI初识境】深度学习模型中的Normalization,你懂了多少?

这是《AI初识境》第6篇,这次我们说说Normalization。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是Batch Normalization等技术非常流行的原因,它使得可以使用更大的学习率更稳定地进行梯度传播,甚至增加网络的泛化能力。今天就来说说和Batch Normalization相关的概念。作者&amp...

weixin_39911916的博客 141
上一篇: 深度学习的150多篇文章和10多个专栏推荐
下一篇: 有三AILab成立 | 寻找合适的你
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值