神经网络体系搭建(二)——深度学习网络

本篇是神经网络体系搭建的第二篇,解决体系搭建的深度学习网络相关问题,详见神经网络体系搭建(序)

深度学习是一个已经被说烂了的词,几乎说起人工智能,非专业人士也会说出深度学习这个词,甚至有时候觉得神经网络,low爆了,深度学习才流行。
我也一度以为深度学习是多么神奇的一个技术,其实说到底,还是神经网络,没啥高大上的,只不过深了很多层,注意,是“深”,而不是“宽”。但是呢,就是深了很多层,确实让它的表现好了很多,所以它才有了一个专有名字,叫做深度学习。

深入了解深度学习,先从多层感知器说起。

多层感知器(MLP,Multilayer Perceptron)

Deep and Wide

多层感知器的多层到底是指wide还是deep,看了一些例子,发现只要wide了,就可以叫一个多层感知器,那些中间层就被成为隐藏层。这里其实是有疑问的,因为除了这里,其他地方的“多层”指的都是Deep方向的层,我也表示很迷糊……

反向传播

神经网络体系搭建(一)中的权重求法,是单层神经网络或者单层网络的堆叠权重矩阵的求法,如果有多层,就需要用反向传播来求出每层的权重矩阵。

反向传播的到底是什么?是误差项,也就是神经网络体系搭建(一)中提到的error_term

要使用梯度下降法更新隐藏层的权重,你需要知道各隐藏层节点的误差对最终输出的影响。每层的输出是由两层间的权重决定的,两层之间产生的误差,按权重缩放后在网络中向前传播。既然我们知道输出误差,便可以用权重来反向传播到隐藏层。
——来自优达学城

我们的目的是更新每一层的权重矩阵,更新的重点是求delta_w,求delta_w的重点是找到误差项,我们可以正向传播找到输出节点的误差项,但是隐藏层的误差项各是什么我们不知道,但是把网络倒过来看,就可以把误差项传播回去,找到隐藏层的误差项,这就是反向传播。

数学原理

除去输入层和输出层,剩下几层就代表几层的网络。反向传播详细的计算过程见下图(可查看原图放大)。


反向传播计算过程

代码实现

下面实现有一个隐藏层的神经网路。

import numpy as np
# 设置超参数
n_hidden = 2  # number of hidden units
epochs = 900
learnrate = 0.005

# 设置数据数量及每条数据的特征数量
n_records, n_features = features.shape
last_loss = None

# 初始化权重
weights_input_hidden = np.random.normal(scale=1 / n_features ** .5,
                                        size=(n_features, n_hidden))
weights_hidden_output = np.random.normal(scale=1 / n_features ** .5,
                                         size=n_hidden)
# 迭代e次
for e in range(epochs):
     # 将各层的delta_w矩阵置零
    del_w_input_hidden = np.zeros(weights_input_hidden.shape)
    del_w_hidden_output = np.zeros(weights_hidden_output.shape)
    # 对每一条数据
    for x, y in zip(features.values, targets):
        ## 正向传播 ##
        # 计算隐藏层节点的输入
        hidden_input = np.dot(x, weights_input_hidden)
        # 计算隐藏层节点的输出
        hidden_output = sigmoid(hidden_input)
        # 计算输出
        output = sigmoid(np.dot(hidden_output, weights_hidden_output))

        ## 反向传播 ##
        # 计算误差
        error = y - output

        # 计算输出节点误差项
        output_error_term = error * output * (1 - output)

        # 计算隐藏节点误差项
        hidden_error_term = np.dot(output_error_term, weights_hidden_output)  * hidden_output * (1 - hidden_output)
        
        # 更新所有delta_w
        del_w_hidden_output +=  output_error_term * hidden_output 
        del_w_input_hidden += hidden_error_term * x[:, None]

    # 更新所有权重矩阵
    weights_input_hidden += learnrate * del_w_input_hidden / n_records
    weights_hidden_output += learnrate * del_w_hidden_output / n_records

深度学习网络

掌握了反向传播,就掌握了深度学习网路的基础,对整个网络的实现也就都明白了。剩下的其实就是根据具体要解决的问题设置网络,调整迭代次数,调整隐藏层数,调整分类器数等等。

过拟合的防止

通常将数据分为训练集、验证集和测试集,为什么会多出来一个“验证集”?就是为了防止过拟合。在训练时,我们通常用它的accuracy来确定学习率、迭代次数等超参数。如果在测试集上做这些,会是网络“记住”测试集,一点点过拟合测试集,因此有了验证集。

为了防止网络过拟合,通常有以下三个办法:

  • 观察“验证集(注意不是训练集也不是测试集而是验证集)”大的performance,在它停止提高时停止训练。
  • L2正则化:对网络应用人为约束,隐式地减少自有参数的数量,同时不会使其更难优化。
    具体做法是将权重的L2范数添加到损失函数乘以一个较小的常数,好处就是不用动网络结构,但是多了一个要调节的超参数。L2范数代表想两种各元素的平方和。
  • dropout:修改网络本身结构,在训练时,随机“删除”一半的隐层单元。


    Dropout,图片来源于优达学城课程截图

问题回答

至此,深度学习网络的骨架搭建完毕。

  • 多层感知器是什么?
    包含众多中间层的神经网络。
  • 深度学习是什么?
    通过加深网络层数使网络表现更好。
  • 深度学习和神经网络有什么区别?
    就是层数深了。
  • 深度学习网络模型有哪些参数可以调整(优化)?
    选择合适的迭代次数、找合适的学习率、用L2正则化中较小的常数、合适的隐藏层数、合适的分类器数、找合适的初始权重矩阵、找合适的激活函数、找合适的损失函数。

以上内容来自822实验室神经网络知识分享
我们的822,我们的青春
欢迎所有热爱知识热爱生活的朋友和822思享实验室一起成长,吃喝玩乐,享受知识。

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

推荐阅读更多精彩内容