zoukankan      html  css  js  c++  java
  • Deep Learning Tutorial 李宏毅(一)深度学习介绍

    大纲

    1. 深度学习介绍
    2. 深度学习训练的技巧
    3. 神经网络的变体
    4. 展望

    深度学习介绍

    深度学习介绍

    深度学习属于机器学习的一种。介绍深度学习之前,我们先大致了解一下机器学习。
    机器学习,拿监督学习为例,其本质上是要找到一个函数映射:输入数据(也就是训练样本)通过函数映射(也就是我们的机器学习算法)到输出空间上(也就是目标值,如果是分类问题,映射到某一类上)。

    [Meachine Learning approx LookingFor A Function. ]

    那么我们如何从一个函数空间里找到目标函数呢?这里必然存在一个指标来评价映射函数的好坏,比如说:准确率,错误率等等。通过这个最优化数据指标我们就能找到 最好的映射函数,也就是机器学习里的算法模型。
    所以,机器学习模型训练过程主要有三个阶段:

    1. 确定模型,从而确定函数映射空间;
    2. 将训练数据应用于函数空间,对模型进行训练;
    3. 找出最好的模型;之后,我们可以将训练好的模型应用到unseen data上(这也是我们最终的目的)。

    图像识别框架

    这样,我们也可以大致推断出深度学习的构建过程:
    DL流程

    神经网络

    神经网络由一系列神经元通过相互连接而形成。因此,在深入理解神经网络之前,先了解一下什么是神经元?
    神经元本质上是一个简单函数,其函数形式为:

    [f = sigma(z); ]

    [z = a_1w_1+a_2w_2+a_iw_i+...+a_Kw_K+b; ]

    其中,(sigma函数)属于一个激活函数,(z)是一个线性函数,其结果可以是任意值,通过激活函数,给模型带来非线性因素,增加模型的表达能力;通常情况下,线性模型的表达能力不够。
    神经元的(w_i)(b)就是神经元模型的训练参数;参数不同,形成的神经元也不相同。
    神经元模型

    神经元的不同连接方式形成的网络架构也各不相同。神经网络的参数包括所有神经元的(w_i(weights))(b(biases))
    如果说,一个神经元是一个简单函数(function),那么神经网络就是一个简单函数集(a\,function\,set).
    深度学习中的“深度”是指神经网络的层数有很多。
    神经网络可以用在识别手写数字。
    手写字体识别

    FAQ:
    Q:设计神经网络时,多少层合适?每层多少个神经元合适?

    [Trial;and;error + Intuition(随缘,多试) ]

    评测模型好坏goodness of function

    以手写数字识别为例,首先我们知道这是一个监督学习问题;其训练数据为实现收集的手写数字和标签;最终达到输入一个手写的数字能给出其所属的类别(0-9)。
    之前我们定义的函数集合,如何评价这个函数集合(模型)表现如何呢?所以需要定义一个评价指标。这里定义的评价指标为Loss函数,指输出值和真实值之间的差距(可以通过计算两个值之间的距离来表示)。最终我们通过优化在所有数据上的总损失Loss来找到最优的模型!本质上就是通过最小化Loss函数来找到最合适的(参数 heta^*),从而确定最优化的模型。

    怎么找到最优化的参数( heta^* pick the best function)

    最先引入脑海的方法就是穷举法,把所有可能的取值都试一次。这种方法肯定不可取!因为,通常情况下深度学习模型层数不止3层,而每层的神经元又有很多,导致最后要优化的参数也是一个非常大的数字。
    方法一:Gradient Descent 梯度下降算法
    梯度下降算法

    这种方法存在的一个问题:最后求解出来的最小值,不是全局最小值,而是局部最小值。
    同时,由于初始的权重系数(w_i)是随机选取的,导致最后的最优化结果也各不相同。
    方法二:Backpropagation 反向传播算法
    Caffe,TensorFlow等都支持的这种求解方法。

    为什么模型总是越来越长,而不是越来越胖?

    Deeper is Better.
    一般而言,参数越多,模型表现效果越好。
    Deep is better

    实验数据来自:Seide, Frank, Gang Li, and Dong Yu. "Conversational Speech Transcription
    Using Context-Dependent Deep Neural Networks." Interspeech. 2011

    对于任意的连续函数(f),定义为:

    [f : R^N o R^M ]

    理论上来讲,这种能由深度学习解决的问题,也可以通过有一个隐藏层的网络模型来解决(给它足够多的神经元)。但是为什么不采用这种方法呢?
    Flat vs Thin

    实验效果并不好?为什么不好?
    论文:Learning Functions: When Is Deep Better Than
    Shallow
    (还没有看!)一种理由是说deep models可以抽取更多的特征相比于Fat models。

  • 相关阅读:
    嵌入式Linux设备驱动编程(1):基础
    嵌入式Linux网络编程
    Linux进程间通信(5):消息队列
    Android网络通信(2):HTTP通信
    Android网络通信(3):Socket通信
    Android网络通信(5):WiFi
    Linux任务、进程和线程
    Android程序的安装和卸载
    Android网络通信(4):WebKit
    Android网络通信(1):Android网络基础
  • 原文地址:https://www.cnblogs.com/ysugyl/p/8783514.html
Copyright © 2011-2022 走看看