人人都能懂的机器学习——用Keras搭建人工神经网络04

回归MLP

MLP可以用于计算回归问题。如果你想要预测一个单一值(比如,获得房子的各种情况来预测房价),那么你只需要一个输出神经元来输出预测值。对于多元回归(即同时输出多个预测值),对于每个输出值都需要一个输出神经元。比如定位图像上的一个点,需要预测二维坐标,那就需要两个输出神经元。如果还想在点的周围预测一个包围框,那么还需要另外两个神经元,用来输出长度和宽度,那么总共需要4个神经元。

通常在构建用于回归的MLP时,输出神经元不会有激活函数,那么输出神经元可以输出任意值。除非你希望保证输出结果总是正的,那么你可以使用一个ReLU函数。或者可以使用一个softplus函数,这是ReLU的平滑变体:
softplus(z)=\log(1+\exp(z))
当z为负值时,输出接近于0,当z为正时,输出接近于z。最后,如果需要保证预测值在一个给定的范围内,那么可以使用sigmoid函数或者tanh函数,然后就可以保证输出在一个适当的区域:sigmoid函数的输出范围在0到1,tanh函数输出范围在-1到1。

在训练过程中使用的损失函数通常是均方误差,但是如果训练集中有很多异常值,可能使用平均绝对误差会更好。或者还可以使用Huber损失,这是两者的结合。

这里再简单介绍一下Huber损失,其公式如下式所示
L_\delta(y,f(x))=\begin{cases} \cfrac{1}{2}(y-f(x))^2, \left|y-f(x)\right|\leq \delta \\ \delta\left|y-f(x)\right|-\cfrac{1}{2}\delta^2, otherwise\end{cases}
公式中的\delta是判断数据点是否离群的一个边界(通常选取1作为边界),小于这个边界时使用均方误差MSE来计算其误差,大于这个边界时使用一个线性函数来计算。这种方式能够减少离群点对于误差计算的权重,从而避免模型过拟合,并且对于大多数数据,均方误差计算能够使收敛速度更快,精度更高。

下面我们用一个表格来展示回归MLP的典型结构

表1.1 回归MLP的典型架构

分类MLP

MLP还可以用于分类任务。对于二元分类问题而言,只需一个带有sigmoid激活函数的输出神经元,使输出结果在0到1之间即可。而这个0到1之间的输出值可以被理解预测为正类别的概率,那么预测为负类别的概率即为1减去正类别概率。

MLP当然也可以处理多标签二元分类问题。举个例子,一个邮件分类系统可以判断每一封邮件是否是垃圾邮件,于此同时,还可以判断出是否为紧急邮件。这样,就会需要两个输出神经元,并且都使用sigmoid激活函数:第一个输出邮件为垃圾邮件的概率,第二个输出邮件是紧急邮件的概率。一般而言,需要给每个正类别都分配一个输出神经元。并且,这里的两个概率并无绝对的联系,并不需要总和为1。这样,分类系统就可以输出任意组合的标签:非紧急正常邮件,非紧急垃圾邮件,紧急正常邮件,紧急垃圾邮件(尽管这种情况会被视为错误)。

如果一个实例只能被分进一个类别当中,但是另外还有三个及以上的类别,那么每个类别都需要一个输出神经元,然后对整个输出层使用softmax激活函数。softmax函数的作用就是确保所有类别估算的概率都在0和1之间,并且各个类别的概率相加为1(为体现各个类别的相斥关系)。这就是多类别分类问题。

图1.9 分类MLP(包括ReLU和softmax)结构.jpg

至于损失函数,既然是预测概率分布,那么交叉熵损失(或者叫对数损失)通常是一个好选择。

表1.2 分类MLP的典型架构

用Keras搭建MLP

Keras是一个高级深度学习API,可以非常轻松地构建,训练,评估并执行各种神经网络。Keras的官方说明文档可以在下面的网址中找到:

https://keras.io/

Keras是由Francois Chollet作为研究项目的一部分而开发的,并在2015年3月被作为开源项目发布。由于Keras具有易用性、灵活性和设计得也十分漂亮,它很快就流行起来。为了能够执行神经网络的大量运算,Keras需要依赖于一个计算后端。目前,你可以从三个流行的开放深度学习库中选择:TensorFlow, Microsoft Cognitive Toolkit(CNTK)和Theano。因此,为了避免混淆,我们将这个实现方式称为多后端Keras。

另外,2016年底以来,其他的实现方式也已经发布。你也可以在Apache的MXNet,苹果的core ML,Javascript或者Typescript(在网页浏览器中运行Keras代码)以及PlaidML(它可以在所有GPU设备上运行,不仅仅是Nvidia)上运行Keras。不仅如此,TensorFlow本身现在也绑定了自己的Keras实现,tf.keras。这个实现方式只支持TensorFlow作为后端,但是它还提供一些非常有用的额外的特性(见图1.10):比如它支持TensorFlow的数据API,这使得加载和预处理数据变得非常容易。因此,我们将使用tf.keras。然而我们暂时不会使用TensorFlow的任何特别的功能,因此代码只需要一点点小的修改就可以在其他的Keras实现中运行了,比如修改一下数据输入。

图1.10 两个Keras API的实现方式:多后端Keras(左)和tf.keras(右).jpg

在Keras和TensorFlow之后,最受欢迎的深度学习库就当属Facebook的PyTorch了(也许PyTorch甚至更加流行一点?)。有一个好消息是,PyTorch的的API与Keras非常相似,所以如果你掌握了Keras,那么如果你想切换到PyTorch也不会很难。在2018年以后PyTorch的流行度指数级增长,这很大程度上要归功于它的易用性和出色的文档,而这正是TensorFlow 1.x的劣势。而现在TensorFlow 2可以说跟PyTorch一样简单了,因为它采用Keras作为其官方高级API,并且大大简化和清理了其他TensorFlow的API。另外,官方的说明文档也重新组织,使用户能更加方便地找到需要的内容。同样的,PyTorch的主要缺点也在PyTorch 1.0中得到了很大程度上的解决。良性竞争对所有人都有好处。

好的,至此我们可以正式开始编程了!下篇文章我们会正式讲讲如何操作!

尽请期待啦!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容