来简单地入门神经网络吧

前言

今天晚上在群里给萌新简单讲解神经网络入门知识,有群友建议我写成博客,想了想觉得非常有道理,那就写写看吧,希望能帮助更多的萌新。如果有萌新尝试学习神经网络,那么个人希望可以首先尝试以下三个项目,不管是数据集还是代码都很容易找到,难度也循序渐进。本文仅聊基础知识,不涉及到具体的项目。如果是没有基础想入门又不知道怎么下手,看完视频还是不知道具体怎么做,那就来看看这篇吧,最下方有pytorch教程文档的链接,里面有带代码的具体项目。

神经网络的工作原理

神经网络的用途

我们都很熟悉函数,一个完整的函数包含自变量,对应法则和函数三个部分,对于一个既定的事实,我们经常试图寻找某个自变量和函数之间的对应法则,这样当出现新的自变量时,我们可以对其进行预测,或者用模型替代人类做某些事情。
然而现实世界中很多对应法则是难以被很具体地描述的,可能其准确的对应法则完全无法描述,或者描述起来很麻烦,这时候工科往往会选择“差不多”的情况,也就是所谓的拟合,例如傅里叶级数,当级数趋向于无穷时,傅里叶级数可以与原函数划等号。而神经网络的拟合方式,实际上就是后验的数理统计,通过大量的自变量 x 和函数 y 去摸索对应法则f(),俗话说见多识广,网络见得够多,自然就能摸到规律。
此外,现实中,完全的拟合是很困难的,首先现实中不存在真正的无穷,而且极度的拟合往往意味着更高的成本(当你描述一个人时,你不可能描述到他有几根头发),这时候就需要抓主要矛盾,拟合对应关系到可以解决问题的程度(把握特征)即可。
神经网络和人类很相似,人类一直走在训练路上,总会根据新的见闻调整自己的认知,世界就这么一个,人却会有不同的世界观、人生观和价值观,这么看的话,谁又不是在过拟合呢。

神经网络的训练过程

人类具有实践中学习的能力,例如,假设一个人想学做菜,看着菜谱开整,做出来以后发现,味道好像有点淡,那么下次就会多放点盐;又或者口感有点干啊,那下次就会多加点水。总的来说,人类可以通过自己的认识进行实践,并通过实践结果调整认识,通过认识,实践,再认识,再实践的过程,这其实就是神经网络的训练过程。神经网络初始化对应认识,正向传播对应时间,计算损失函数,反向传播并梯度下降更新参数对应再认识,通过新的参数再次正向传播对应再实践。
如果你第一次接触神经网络,不知道怎样开始着手做些有趣的事,那么不妨依次尝试下面这三个内容。

第一节 基于DNN的猫狗分类

DNN是基础的神经网络模型,特点就是神经元排成一排,然后一层一层码,码好以后把数据秃噜整齐,往模型里送,正向传播,计算损失函数,反向传播,梯度下降,再来一轮。等到损失函数不再变化,说明模型尽力了,没办法,停下来,这样就有了一个模型(鼓掌)。当然这样出来的模型性能不一定好,或者说一般都有限,毕竟只是个基础的模型,但可以表现出一定的能力,最起码能明显看出比随机蒙还是更准,想要进一步提升的话就需要对模型进行优化,优化的方向很多,这里不讨论。

第二节 基于CNN的手写数字识别

上一节说过,DNN是基础的神经网络模型,这一点体现在其万金油的特点上,但是我们都知道,样样通,就样样都不会精,什么都行其实也就是什么都不行,在上一节的猫狗分类里,你会发现其分类准确度并不高,原因是DNN对数据中的每一个点都是一视同仁的,并没有根据数据类型做任何的优化,换句话说,DNN处理数据的方式没有任何针对性,而对于图片来说,特征往往集中在某一区域,以人为例子,具有可分辨性的一张人脸肯定不止一个像素点,而是一团在同一区域的像素点才形成了一张人脸,这一团像素点是挨着的,但DNN并不在意;同时,人的脸并不一定总在照片中的同一位置,这一点,DNN也不在意。换句话说,DNN在处理图像时,并没有考虑图像这种数据本身的特性,这并不合适,实际上在神经网络的应用中,你会发现根据对数据已有的认知去设计神经网络是非常重要的,会极大地影响网络的性能。
考虑到图像的特点,图像中的某些区域应该被“框”出来,这就是卷积核的目的。同时提醒大家,不管你是什么专业的,请务必掌握好本专业的知识,因为对数据的认识决定了你涉及神经网络的能力

第三节 基于RNN的机器翻译

数学和算数不同,数学的目的是解决问题,算数的目的是得到结果,在现实中,有些数据是数字,可以直接处理,但也有些数据并不是数字,例如现在你看到的这篇文章,存在存储设备里时肯定不能是以汉字的形式,这就需要对数据进行编码,编码是个很宽泛的内容,根据数据类型和目的不同,编码方式有很多,常见的比如计算机常用的ASCII码,或者我们通信专业的模数转换。
而对于语言来说,词汇之间是存在逻辑关系的,在写法上完全不相干的两个词或词,其逻辑上可能非常接近,例如“爹”和“娘”这俩字吧,“爹”可以拆成“直系亲属”、“上一辈”、“男性”等,而“娘”可以被拆成“直系亲属”、“上一辈”、“女性”等,很明显,这两个字虽然完全看不出关系,但实际上它们的关系就差了一个“男性”和“女性”,这一点在对词进行编码时必须要考虑到,然后这就体现了编码方式的重要性,合理地编码应该把这种逻辑关系表达出来,当然,需要大量的训练,比如现在常用的bert编码,听说上百个GPU跑了几个月跑了几十T数据,不知道是真是假。当然,对词直接进行one hot之类的编码不含逻辑关系地硬编也是可以的,所以,编码,或者说对数据的预处理,应当切实地考虑到数据的特点和需求。对于无法用深度学习模型直接处理的数据,应当用合理的方式先处理好,整成适合模型处理的数据,这样就可以极大提升效果,所以,大家折腾数据前,记得先预处理,这里说的预处理并不仅仅包含针对网络的预处理方法,同样包括对数据的先验知识,比如怎样可以让特征更凸显,更容易被模型识别,从这个角度看的话,包括编码,时频转换等手段,高斯模糊等手段,都可以被视为预处理,请务必结合自身对数据的认知,使用合理的方法,比如传统手段等尽可能突出希望学习到的特征,而淡化不相干的特征,预处理的好坏很大程度上就决定了数据集的质量,会明显影响模型性能。

结尾

BB得差不多了,做完这些,基本的神经网络应用能力应该有了,最后把pytorch的教程文档放在这里,纸上学来终觉浅,绝知此事要躬行,光看视频或者看文章是不会真正拥有实战能力的,务必试试自己整点活,比如狗脸分类啥的,想象力是人类的财富[doge]
https://pytorch.apachecn.org/#/

  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值