2018-06-29 10:11:39 program_developer 阅读数 19465
  • 5天搞定深度学习入门系列

    我们这门课程是面向0基础学员,从上世纪60年代基础的的单层感知器开始学习,从基础的知识开始,进行体系化的学习。 课程会包含神经网络领域大多数重要分支,并通过这些分支延伸到如今热门的的深度置信网络DBN,卷积神经网络CNN,深度残差网络RES和长短时记忆网络LSTM。 帮助大家从人工智能神经网络的新手变成高手。

    25548 人正在学习 去看看 覃秉丰

最近在看深度学习中embedding的内容,把自己看过比较好的相关博客总结收录如下:

(1)深度学习中Embedding层有什么用?

地址:https://blog.csdn.net/u010412858/article/details/77848878

(2)英文版介绍Embedding层作用:

https://medium.com/towards-data-science/deep-learning-4-embedding-layers-f9a02d55ac12

翻译:

https://juejin.im/post/599183c6f265da3e2e5717d2

(3)用一个小例子来介绍embedding工作原理:

http://www.orbifold.net/default/2017/01/10/embedding-and-tokenizer-in-keras/

(4)用很全面的例子来介绍embedding:

https://juejin.im/entry/5acc23f26fb9a028d1416bb3

http://frankchen.xyz/2017/12/18/How-to-Use-Word-Embedding-Layers-for-Deep-Learning-with-Keras/

(5)embedding在Tensorflow中的例子:

https://blog.csdn.net/goddessblessme/article/details/79892613

import tensorflow as tf
import numpy as np

input_ids = tf.placeholder(dtype=tf.int32, shape=[None])
embedding = tf.Variable(np.identity(5, dtype=np.int32))
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
print(embedding.eval())
print(sess.run(input_embedding, feed_dict={input_ids:[1, 2, 3, 0, 3, 2, 1]}))

解释:

第四行:输入变量占位符,长度不定。

第五行:embedding的tensor变量,定义嵌入矩阵,此次为对角阵,矩阵对角上的值为1,其它为0,可以认为是一种one-hot编码。


第六行:通过指定input_ids查找编码。

第七、八行:初始化。

第九行:输出嵌入矩阵。

第十行:feed_dict输入变量赋值,根据input_ids输出第三行的值,分别是对应为[1,2,3,0,3,2,1]的编码向量。

注意:embedding层是可以训练的层,嵌入矩阵是可以学习得到的。

(6)这篇文章可以清楚的理解“词嵌入”和“嵌入层”之间的关系:

地址:http://www.360doc.com/content/17/1021/00/16619343_696787348.shtml

2019-12-05 21:56:32 web_211xun 阅读数 40
  • 5天搞定深度学习入门系列

    我们这门课程是面向0基础学员,从上世纪60年代基础的的单层感知器开始学习,从基础的知识开始,进行体系化的学习。 课程会包含神经网络领域大多数重要分支,并通过这些分支延伸到如今热门的的深度置信网络DBN,卷积神经网络CNN,深度残差网络RES和长短时记忆网络LSTM。 帮助大家从人工智能神经网络的新手变成高手。

    25548 人正在学习 去看看 覃秉丰

深度学习概念:

深度学习是机器学习领域中一个新的研究方向,目的是为了实现人工智能应用。深度学习的概念源于人工神经网络的研究,神经网络是含多个隐藏层的多层感知器,构建神经网络动机在于建立模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据。

深度学习步骤:

如何学习深度学习:

推荐一套深度学习视频教程给大家,这套教程适合数学不好的小白来学习,没有繁杂的数学公式,讲解通俗易懂。

点击观看

2019-09-08 22:13:49 qq_23225073 阅读数 130
  • 5天搞定深度学习入门系列

    我们这门课程是面向0基础学员,从上世纪60年代基础的的单层感知器开始学习,从基础的知识开始,进行体系化的学习。 课程会包含神经网络领域大多数重要分支,并通过这些分支延伸到如今热门的的深度置信网络DBN,卷积神经网络CNN,深度残差网络RES和长短时记忆网络LSTM。 帮助大家从人工智能神经网络的新手变成高手。

    25548 人正在学习 去看看 覃秉丰

知乎盐选,邵天兰的分享,介绍了深度学习中常见的名词术语,可以快速的了解深度学习内的大体内容。

1 从分类器开始

  • 机器学习的思路
    人共设计特征,提取特征 ===> ML Algorithm(分类器) ===> 分类结果输出
  • 深度学习思路
    神经网络提取特征 ===> 神经网络进行分类 ===> 分类结果输出

2 神经网络的基本组成单元:神经元,层

neuron

input × weight + bias --> sum --> activate function(eg: sigmoid) --> output
  • input/output
  • neuron
  • weighted sum
  • weights
  • bias

activation function

通过 activation function将神经元引入非线性,常见activation function

  • sigmoid
  • tanh
  • ReLU

layer

  • Full Connected layer(FC)
    FC层的每一个neuron的input都是上一层所有neuron的output
  • input layer
  • hidden layer
  • output layer

3 深度学习扛把子:卷及神经网络CNN

CNN layer(卷积层)

55622036236982432.jpg-192.5kB
909073084103838814.jpg-176.3kB
每一个网络层都是有深度的,是三维立体的。每一层的卷积kernel个数就是每一层的网络深度,每一个kernel可以认为是一个特征提取器,卷积的过程其实也就是一个filter的功能。如果有100个kernel,可以认为这一层卷积层就提取了100个features传递给下一层。
神经网络的参数主要在这一层,包括kernel size,Receptive Field, Stride(步幅),padding

Pooling layer(池化层,降采样层)

池化层看做采样,会降低网络层的长度和宽度,一般是减半。这一层的作用是产生了一定的“不变性”,可以认为是一种很那个选取最有用信息的操作。
常见的有

  • Max Pooling
  • Average Pooling

softmax

705710296284107769.jpg-237.5kB

经典网络 VGG

847937086258302368.jpg-166.6kB

Batch normalization

直觉来看,如果每层神经元的输入在训练过程中分布保持一致,会更容易收敛。强行让上一层的输入在一组数据中符合一定要求(均值0,方差1)。也称为Regularizer。

更深层的网络 ResNet

618026598576080561.jpg-193.1kB

更深层的网络 GoogLeNet

362021482332586638.jpg-191.9kB

4 真正让深度学习工作起来

优势:完成复杂学习任务
困难:参数多,数据少,容易过拟合,训练效率低
对策:海量数据,增加算力,加入缓解过拟合方法,加快训练方法

防止过拟合的方法

  • 正则化
  • dropout
    训练时让一些神经网络输出为0
  • noise
    训练时让神经元输出加上一些noise
  • early stopping

5 神经网络训练

前向传播 --> 和ground true比较计算损失函数 --> 反向传播调整每一层的参数

问题:

  • 梯度消失 gradient vanishing
  • 梯度爆炸 gradient explod

更新参数的基本原理

  • 梯度下降 gradient descent

学习率learning rate

重用预先训练的特征 Fine-tuning

在大数据集上训练非常浪费时间,但是小数据集训练效果又不好。由于针对不同的任务,图像特征很多是相通的,可以重用在大数据集上训练得到的特征。
应用场景:yolo模型里面不包含铁轨和罐车,但是现在却需要识别,可以使用yolo已经预训练好的模型,保持卷积层不变(冻结层参数 Freeze Layers),重新初始化全连接层,再训练。

6 前沿方向

  • 从分类到目标检测Object Detection
    RCNN,Fast RCNN, Faster RCNN, SSD,YOLO

  • 语义分割Semantic Segmentation和实例分割Instance Segmentation
    FCN,Mask FRCNN

  • 模型小型化
    SqueezeNet,ShuffleNet

2020-03-08 16:05:58 qq_34177812 阅读数 363
  • 5天搞定深度学习入门系列

    我们这门课程是面向0基础学员,从上世纪60年代基础的的单层感知器开始学习,从基础的知识开始,进行体系化的学习。 课程会包含神经网络领域大多数重要分支,并通过这些分支延伸到如今热门的的深度置信网络DBN,卷积神经网络CNN,深度残差网络RES和长短时记忆网络LSTM。 帮助大家从人工智能神经网络的新手变成高手。

    25548 人正在学习 去看看 覃秉丰

排版可能更好一点的永久原文链接:深度学习的数学-神经网络、输入层、隐藏层、输出层

前言

前文中了解到,神经网络由多个神经单元组成,而本篇博客将会了解到深度学习由多个神经网络组成,并且分为 输入层、隐藏层和输出层,隐藏层涉及到的知识点最多,是本文的重点

正文

阶层型的神经网络主要结构如下图所示,通过输入层激活信号,再通过隐藏层提取特征,不同隐藏层神经单元对应不同输入层的神经单元权重和自身偏置均可能不同,输入层兴奋传递到隐藏层兴奋,最后输出层根据不同的隐藏层权重和自身偏置输出结果

一个例子

借用书中的一个例子,目标是识别一个 4 * 3 的黑白图像是0还是1,例子中输入层采用了 12 个神经节点来对应 4 * 3 个像素点,然后隐藏层再使用 3 个神经单元进行特征提取,最后输出层再使用两个神经节点标记识别结果是 0 或 1

输入层

如上图所示,十二个神经单元对应 4 * 3 像素(黑白),如果该像素是黑的,则对应神经元兴奋,否则静息

输出层

输出层负责输出最后结果,输出层有两个节点,如果识别结果偏向0,那么第一个节点兴奋度会高于第二个节点,如果识别结果偏向1,那么第二个节点兴奋度会高于第一个节点

隐藏层

背负了 特征提取 的伟大使命,隐藏层每一个节点会对输入层的兴奋有不同的接收权重,从而更加偏向于某种识别模式
比如书中举例,隐藏层第一个神经单元对应下图模式A,也就是对应输入层 4、7号神经单元接收权重比较高,对其他神经单元接受权重比较低,如果超过了神经单元自身的偏置(阈值)则会引发隐藏层的兴奋,向输出层传递兴奋信息,隐藏层其他神经单元同理

各个层如何向上传递信息

根据上边的介绍可知,输入层每个神经单元直接对应原始数据,然后向隐藏层提供信息,隐藏层每个神经单元对不同的输入层神经单元有不同的权重,从而偏向于对某种识别模式兴奋;多个隐藏层的神经单元兴奋后,输出层的神经单元根据不同隐藏层的兴奋加上权重后,给到不同的兴奋度,这个兴奋度就是模型最终识别的结果。

神经网络中权重和偏置的作用

根据上述信息可知,权重会影响神经单元对输入信息敏感程度,比如隐藏层的神经单元通过控制权重形成识别模式偏向,输出层的神经单元调整对隐藏层神经单元的权重,可以形成输出结果的偏向;
而偏置,可以理解为敏感度,如果没有设置合适的偏置,一些“噪音”就会影响模型识别的结果,或者一些本该被识别出来的场景,但是在传递过程中被屏蔽掉了。

有监督学习下,如何确认权重

在这里需要引入一个概念,『损失函数』又称为代价函数(cost function),计算方法为预测值与学习资料中偏差值之和(误差)的平方,有监督学习就是经过一些『学习资料』的训练,让模型预测的『误差』尽量的小。

总结

神经网络由多个神经单元组成,深度学习中的神经网络可分为三层,分别是 输入层、隐藏层和输出层,每一层都有对应的神经网络与下一层连接。
输入层主要用于获取输入的信息,比如黑白照片的像素是黑色的还是白色的,大小主要取决于输入信息规模;
隐藏层主要进行『特征提取』,调整权重让隐藏层的神经单元对某种模式形成反应
输出层用于对接隐藏层并输出模型结果,调整权重以对不同的隐藏层神经元刺激形成正确的反应,输出的兴奋度即为结果
其中,偏置(阈值)可以排除一些“噪音”影响,监督学习下通过『损失函数』来衡量模型是否合理,计算方法是 预测值与正解之差(误差) 求和再平方;目标是通过学习资料的训练,让误差更小;

2020-03-11 16:37:47 weixin_43709838 阅读数 20
  • 5天搞定深度学习入门系列

    我们这门课程是面向0基础学员,从上世纪60年代基础的的单层感知器开始学习,从基础的知识开始,进行体系化的学习。 课程会包含神经网络领域大多数重要分支,并通过这些分支延伸到如今热门的的深度置信网络DBN,卷积神经网络CNN,深度残差网络RES和长短时记忆网络LSTM。 帮助大家从人工智能神经网络的新手变成高手。

    25548 人正在学习 去看看 覃秉丰

深度学习训练中梯度消失的原因有哪些?有哪些解决方法?

梯度消失产生的主要原因有:一是使用了深层网络,二是采用了不合适的损失函数。

  1. 目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助。而链式法则是一个连乘的形式,所以当层数越深的时候,梯度将以指数形式传播。梯度消失问题一般随着网络层数的增加会变得越来越明显。在根据损失函数计算的误差通过梯度反向传播的方式对深度网络权值进行更新时,得到的梯度值接近0,也就是梯度消失。
  2. 计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显,原因如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。

解决方法:

1.pre-training+fine-tunning

此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。

2. 选择relu等梯度大部分落在常数上的激活函数

relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题。

3.Batch Normalization

BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失的问题,或者可以理解为BN将输出从饱和区拉到了非饱和区。

4.残差网络的捷径(shortcut)

相比较于之前的网络结构,残差网络中有很多跨层连接结构(shortcut),这样的结构在反向传播时多了反向传播的路径,可以一定程度上解决梯度消失的问题。

5.LSTM的“门(gate)”结构

LSTM全称是长短期记忆网络(long-short term memory networks),LSTM的结构设计可以改善RNN中的梯度消失的问题。主要原因在于LSTM内部复杂的“门”(gates),LSTM通过它内部的“门”可以在更新的时候“记住”前几次训练的”残留记忆“。

没有更多推荐了,返回首页