2019-11-08 11:07:33 qq_16414293 阅读数 19
  • Erdas遥感影像处理入门实战教程(GIS思维)

    《Erdas遥感影像处理入门实战教程》以Erdas2010版本经典界面进行实战教学,设计12章内容,正式教学内容总共45课时,15个小时时长。从软件界面开始,到后的应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。课程根据作者实际工作经验,以及采访学员需求,开展课程设计,实用加实战,会是你学习路上的好帮手。

    4416 人正在学习 去看看 黄晓军

用三张图理解深度学习的原理


目前正在学习用深度学习的方法进行遥感影像分类,在这里做下学习记录。

神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一
串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize,见图1-7)。权重有时也被称为该层的参数(parameter)。在这种语境下,学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。但重点来了:一个深度神经网络可能包含数千万个参数。找到所有参数的正确取值可能是一项非常艰巨的任务,特别是考虑到修改某个参数值将会影响其他所有参数的行为。
引自书籍中
想要控制一件事物,首先需要能够观察它。想要控制神经网络的输出,就需要能够衡量该
输出与预期值之间的距离。这是神经网络损失函数(loss function)的任务,该函数也叫目标函数(objective function)。损失函数的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏(见图1-8)。
引自书籍
深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示
例对应的损失值(见图1-9)。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。
引自书籍
一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。其输出结果自
然也和理想值相去甚远,相应地,损失值也很高。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(training loop),将这种循环重复足够多的次数(通常对数千个示例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络。再次强调,这是一个简单的机制,一旦具有足够大的规模,将会产生魔法般的效果。

2018-07-16 14:29:59 cyh153296 阅读数 5230
  • Erdas遥感影像处理入门实战教程(GIS思维)

    《Erdas遥感影像处理入门实战教程》以Erdas2010版本经典界面进行实战教学,设计12章内容,正式教学内容总共45课时,15个小时时长。从软件界面开始,到后的应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。课程根据作者实际工作经验,以及采访学员需求,开展课程设计,实用加实战,会是你学习路上的好帮手。

    4416 人正在学习 去看看 黄晓军

影像组学学习笔记

题外话

这仍然是一篇学习笔记。近期在不同的学术会议上,有幸聆听学习了几位影像组学的大咖做报告,受益匪浅。以大咖们的报告为指导,自己也学习查找了一些文献,加入了一点点自己的理解和想法,整理成一篇笔记,与大家分享。

名词解释:影像组学(Radiomics)

“影像组学”,一共4个字,每个字都是常见字啊。但4个字放一起啥意思?好吧,我们把它们拆成“影像”和“组学”两个词来说。这里的“影像”通常指的就是放射影像,是这种方法研究的对象,目前大家选择最多的是CT、MR影像。但额外说一句,已经有大咖开始选择超声影像作为研究对象(我自己要研究的也是这类)。组学,英文为Omics,是目前生物和医药前沿研究领域最流行的后缀了。如果用一句话来解释组学,就是把与研究目标相关的所有因素综合在一起作为一个“系统”来研究。说的高大上一些,组学可以看做是西方(现代)科学研究从“点”到“面”再到“系统”理念发展的大趋势代表性体现。 
举个例子,组学(Omics)这个后缀最早被提出是用在“基因组学”(Genomics)中。按照上面的拆解模式,基因组学的研究对象是“基因”,采用的研究方法不再是最早单独研究某个基因片段的作用,而是将所有的基因构成综合起来进行系统化的分析和考虑。 
回到影像组学。它的研究对象是放射影像,它的研究方法则是将影像内包含的所有信息提取出来然后进行综合系统化分析。更确切的说,影像组学是采用自动化算法从影像的感兴趣区(ROI)内提取出大量的特征信息作为研究对象,并进一步采用多样化的统计分析和数据挖掘方法从大批量信息中提取和剥离出真正起作用的关键信息,最终用于疾病的辅助诊断、分类或分级

技术路线:信息提取与分析

关于影像组学,还有一种极简的解释,”Convert images to mineable data in high throughput”,将影像以高通量方式转换为可挖掘的数据“。那么,如何转换,又如何挖掘呢?下图给出了一个简单的流程说明。

图像收集

图像收集,也就是临床试验中常说的“病例入组”。两个要点:一、制定好入组标准是最基础的要求;二、在结构或功能影像以外包含必要的临床病历信息或基因、病理数据已经成为当前新的研究趋势,也是发高水平论文的新标准。换句话说,单独只有结构影像已经不太好在大杂志上发文章了。

感兴趣区分割

这里说的感兴趣区,通常指的就是病灶,比如癌症或肿瘤区域。图片中列出了三种分割(勾画)方法,但目前来看,临床用的最多的还是纯手工。也就是类似于Photoshop中的手工抠图了。这也是影像组学中比较耗费高级人力的一个步骤了。说“高级人力”,是因为需要专业的影像医生来勾画。

特征提取

图中列出了目前常用的4大类特征。真的是4“大”类,因为每类都可以提取出数十、乃至上百的信息。借用中科院田捷教授给出的表格,大家感受一下。

统计分析

一下子提取出来数百上千的特征怎么办?必须用统计分析了,其实核心目的就是减少特征的数量,找到少数的真正关键的特征。具体的统计方法就不介绍了,图片中仅仅是列举了几个常用的。找到这些关键特征后,还需要建立起相应的预测或分类模型。

分类与预测

千挑万选建立起来的模型肯定要应用才能体现价值。目前影像组学应用最多的领域包括肿瘤分类、肿瘤分期和愈后预测等。

应用领域

辅助诊断

影像组学目前应用最多的领域首推肿瘤辅助诊断,尤其是对肿瘤良恶性的辅助判读。例如,对于肺结节良恶性的辅助判断;对于肝细胞癌良恶性的辅助判读;对宫颈癌分期的辅助诊断。

Staging of cervical cancer based on tumor heterogeneity characterized by texture features on 18F-FDG PET images

肿瘤预测

影像组学还可以拥有对肿瘤病灶的发展趋势进行预测。在这方面,广东省人民医院刘再毅教授、梁长虹教授和中科院自动化所田捷教授的联合团队做了很多优秀工作,发表在高级别学术期刊上,包括发表在Journal of Clinical Radiology上的术前预测结直肠癌淋巴结转移;发表在Radiology上的预测非小细胞肺癌无进展生存率。

Radiomics Signature: A Potential Biomarker for the Prediction of Disease-Free Survival in Early-Stage (I or II) Non—Small Cell Lung Cancer

Development and Validation of a Radiomics Nomogram for Preoperative Prediction of Lymph Node Metastasis in Colorectal Cancer

治疗方案选择

影像组学也被用于不同手术方案的治疗效果预测。浙大医学院邵逸夫医院团队在Clinical Cancer Research上发表了直肠癌新辅助化疗的治疗效果评估方法。

Rectal Cancer: Assessment of Neoadjuvant Chemoradiation Outcome based on Radiomics of Multiparametric MRI

面临的挑战

可重复性

影像组学从影像中提取了很多隐藏的特征信息,其中一些信息是很“微妙”的,例如纹理信息。这些信息的抗干扰能力如何,普遍性如何?直接决定了相应的影像组学模型的抗干扰性和通用性。例如,使用某个厂商的CT采集数据建立的模型,是否能够适用于另外厂商CT采集的数据?即使是同一厂商相同型号的CT机,如果重建参数不同,或者打对比剂的剂量或扫描时间点不同,是否会影响模型适用性? 
学术界已经注意到上述问题,并且提出,需要通过多中心试验来验证上述问题。

大数据

影像组学研究所需要的入组病例数越来越多,而单个病例所包含的影像数据量随着扫描层数和分辨率的上升,也在迅速增大。两方面因素累积,影像组学所需要存储和分析数据量已经变的非常大,称得上是“大数据”了。随之而来的则是数据分析计算量的挑战和工作量的负担,也就是意味着计算服务器硬件成本的高投入和研究人员人力成本的高投入。

数据共享

如前面提到的,多中心试验是保证影像组学模型可重复性的一个重要方式。多中心试验首先要求能够实现数据共享。而影像组学中的数据共享目前还面临诸多限制,不仅包括数据所有权和数据保护的限制,而且,在互联网上跨地域实现海量“大数据”的共享和传输还面临着传输效率和数据安全性的实际问题。

经典论文推荐

开山之作

Radiomics: Extracting more information from medical images using advanced feature analysis 
2012年,荷兰学者Lambin在上面的论文中正式提出了放射组学的概念,即采用自动化、高通量的特征提取方法将影像转化可以挖掘的特征数据。奠基之作,怎么着也要拜读一下啦。

权威最新综述

Radiomics: Images Are More than Pictures, They Are Data.pdf 
2016年Radiology杂志发表了关于影像组学的权威综述。这篇综述中再次强调影像组学的核心理念“the conversion of digital images to mineable data”,并且指出这种从图像到数据的转换将成为以后的临床影像分析常态。如果想用一篇文章了解影像组学最新发展趋势,那就首推此文了。

新入门者必读

Computational resources for radiomics 
如果哪位已经撸起袖子,下定决心要开始做影像组学,这篇文章强烈推荐。如同文章摘要中提到的,这篇文章就是为影像组学的新入门者量身打造的,不仅介绍了各分析步骤流程,更重要的是,每个步骤都推荐了适用的工具软件。而且,还附上软件应用的例子。简直不能更贴心啊。

题外篇:关于“组学”

有对“组学”这个神奇蹿红的学术热词感兴趣,想了解更多的同学,推荐点击下方附赠的链接啊。 
About Omics 
Wiki 
组学的未来 
组学:一个疯狂“寄生”的故事

2019-08-15 22:16:07 qq_34616741 阅读数 579
  • Erdas遥感影像处理入门实战教程(GIS思维)

    《Erdas遥感影像处理入门实战教程》以Erdas2010版本经典界面进行实战教学,设计12章内容,正式教学内容总共45课时,15个小时时长。从软件界面开始,到后的应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。课程根据作者实际工作经验,以及采访学员需求,开展课程设计,实用加实战,会是你学习路上的好帮手。

    4416 人正在学习 去看看 黄晓军

这篇文章说一下怎么分析医学影像图像,并利用统计学和机器学习建模,实现预后等回归学习。这篇文章会不断的修改,因为我也会不断的学习,不断的添加和改正文章中的内容。
医学影像已经是非常火的一个方向了,对于医学图像的处理有很多不同的领域,也有很多不同的方法。随着人工智能的发展,很多的人工智能算法已经在医学图像的处理中取得非常不错的进展。比如说深度学习中,Unet对HE染色和IHC染色图像的细胞核分割,CT或者MR图像的肿瘤分割等。在深度学习没有火起来的时候,对医学影像的处理更多的是基于从图像中提取特征,然后在通过机器学习对特征进行建模,实现分类(预后好坏等)。我下面就从流程上说说如何进行图像数据的评估,如何对图像进行特征提取,如何建模等。
首先是图像的获取。一般的影像图像有,CT,X光,MR等。病理图像(HE,WSI,ICH等)是用显微镜拍的,虽然也可以按照类似的方法来做,但这里不涉及病理图像。我们一般都是用肿瘤的CT或者MR,一个是因为这种预测更有意义:对临床上对肿瘤的治疗很大程度上是根据肿瘤的分级和分期来指定治疗方案的,而且对肿瘤的准确预后也对治疗决策的指定有着非常大的影响。传统的分级分期和预后的方法大多数是根据一些临床检测的指标,比如说各种体内成分的含量,有无转移,有无浸润,肿瘤大小,肿瘤边缘的情况等等等等。这些指标都是比较传统医学的指标,一个是预测不是准确,一个是主观性太强,很依赖医生的经验(比如说有无浸润的判断,肿瘤边缘是否清晰等)。一个是这个工作几乎只有计算机可以做。因为这类影像图像灰度级别差距很小,虽然可以通过窗宽窗位来进行观察,但人眼还是有很大的局限。计算机的辅助还是很有必要的。
所以图像一般都是医学里面对患者的真实数据资料,一个是公开数据库的资料。如今医学影像的研究已经很普及,网上也有很多公开的数据库,很多机构也举行了类似的比赛,想要下载资料的话应该开始比较容易的。
图像拿到以后,我们还需要一点处理。一般来说,我们都会划定我们需要提取体征的区间。也就是我们所说的ROI。我们都看过CT或者MR的图片,我们会发现图片上并不是所有区域都是肿瘤或者不正常的组织,很大一部分是正常的。所以我们就要把病灶圈出来
在这里插入图片描述
类似这样子,把肿瘤区域画出来,我们把绿色的线叫做roi。如果是CT这样的的断层扫描图像,那我们就有不同的处理方式。一个是每一张图片都画ROI,然后对所有层的图片进行提取。一种是挑一张具有代表性的层(可以是肿瘤最大的一层),画ROI。ROI的储存形式有很多种,不懂的格式有不同的存储方式。ROI一般都是医生画的,公开的数据库里面很多都会带有ROI。如果不对图像进行画ROI,直接进行处理这种方式现在几乎不会做这么做了,我个人也认为不画ROI是非常不可取的,因为提取的时候涉及了太多的非肿瘤区域,得出的结果也不可信。
接着我们就是对图像进行特征提取。特征有很多种,有我们一般的形态特征(就是肿瘤的大小等),一阶灰度特征(灰度直方图等),灰度共生矩阵等,小波特征等。这些特征总得加起来数量也会非常可观。形态特征可以提取10多到几十个,一阶特征也可以有很多个,小波各种参数加起来可以几百到上万个。
在特征方面,其实也有挺多问题的,比如说图像本身就有很多不同。不同机型,不同参数拍出来的图片其实是有很大的区别的,如果我们不做标准化,我们收集到的图像本来就不在一个维度,所以这个就会造成很多的差异,但这个好像并没有很好的解决方法。现在报道的好像没有很统一好用的标准化方法。
特征提取出来后,一般是要进行ICC检验的。(具体可以维基百科查一下,或者看我的另一篇博文)
ICC后选出ICC值较高的特征(一般都要大于0.75,大于0.9最好),我们就要进行降维了。降维的方法和建模方法一样,多的数不清。我们可以用统计学的方式,比如说我们可以算每个特征的KM曲线,选取相关性高的特征。也可以做C-index。同时,我们也可以用机器学习的方法降维,降维方法也有很多种,比如常用的lasso,岭回归,MRMR等等。一般特征数量不超过样本数的10%。比如说有200个样本,那么特征数就不要超过20个。在建模完成后也可以用AIC评估模型。一般是在能取得好的回归效果的前提下,特征数越少越好,多了会过拟合。
在选取了特征后,一般都要进行特征的归一化,这样子可以均衡特征的权重,不会使得一些特征值很大的特征占据过大的权重,而小值的特征占据过小的权重。
然后就是建模和调参了。模型可以选取很多种,lasso啊,svm啊,cox回归啊之类的。总是就是都试一遍,看看那个效果好。还有就是对模型的调参,这个就不细说。
最后的就是结果的conclusion了。这个是非常重要的。一般的工科生都会在这里吃亏。工科并不注重结果的意义,只是求出来一个好的结果就收工。但是如果是想要发表临床相关的文章,就要对结果进行详尽的分析。分析才是文章的大头。
分析的方法多种多样,评估的方式,图表也是多种多样,这里也不细说,详细的去看看一些相关文献吧。
以后会不定时修改这篇文章。查漏补缺。
欢迎指正。
第一次补充。
这种形式的影像组学已经出现了几年,现在更多的成为临床医生用来发文章的方向。虽然研究很多,但是并没有一套能够在CT图像甚至是单病种的CT图像通用的方法和特征。建模方法简单,临床意义明确,成为了水文章的好方向。现在的影像组学更加需要严格的统计学意义,需要临床意义上的总结分析才能够发文章。

2019-11-02 10:03:34 weixin_43868977 阅读数 42
  • Erdas遥感影像处理入门实战教程(GIS思维)

    《Erdas遥感影像处理入门实战教程》以Erdas2010版本经典界面进行实战教学,设计12章内容,正式教学内容总共45课时,15个小时时长。从软件界面开始,到后的应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。课程根据作者实际工作经验,以及采访学员需求,开展课程设计,实用加实战,会是你学习路上的好帮手。

    4416 人正在学习 去看看 黄晓军

大一下学期和两位学长组队参加“泰迪杯数据挖掘竞赛”,遇到的B题是关于直肠癌影像学诊断的题目。现将比赛成果做一个小结:

我们主要研究通过影像组学方法处理直肠癌的图像分割与智能诊断的问题。首先,我们探究了当今医疗图像分析的科研背景,并结合实际直肠癌诊断问题确定了大致的模型实现方向。针对第一问中的直肠肿瘤的CT影像分割问题,我们先对图像做了数据增强和清洗,并对其做了阈值分割和区域分割,结束数据预处理之后再搭建U-Net深度学习神经网络对肿瘤图像进行分割使用dice系数做模型评价,训练出自动分割图像掩模的模型。针对第二问,我们先使用掩模提取出了CT图中得到对应区域,对区域中的部分特征进行量化,再使用多元线性拟合的神经网络模型做图像组的二分类训练,用F-score做模型评价,得到最终的预测结果。在模型训练时,我们通过逐渐扩大训练集的大小的方式以保证在维持模型准确性的前提下提高模型鲁棒性,作为我们训练方式的一大亮点。对于第三问,我们对模型的有效性进行了检验之后,证明了肿瘤区域的影像学特征和淋巴结转移具有较强相关性,再对模型的鲁棒性进行检验,证明模型的稳定性,得到医生划分区域较小时的影响比划分区域较大时的影响要大的结论。

数据预处理

'''
@Description: 
@Author: JiangQinrui
@Date: 2019-09-22 12:35:32
@Last Editors: JiangQinrui
@LastEditTime: 2019-10-24 11:33:50
'''
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
from keras.models import Sequential
from keras.layers.core import Dense,Activation
from keras.datasets import mnist
from keras.utils import np_utils
from keras.optimizers import SGD
from scipy import ndimage as ndi
import matplotlib.pyplot as plt
import numpy as np
import dicom
import pydicom
import SimpleITK as sitk

import xlrd
import glob
import csv
import os  
import time
# This is a note
# Every note is written like that
# import all the packages that will be used
# Now the code starts
def file_name(file_dir):   
    L=[]   
    for root, dirs, files in os.walk(file_dir):  
        for file in files:  
            if os.path.splitext(file)[1] == '.dcm':
                L.append(os.path.join(root, file))  
    return L
err=[]
def show_CT(phase,l):
    for i in range(len(l)):
        for path in file_name('dataset\\'+str(int(l[i][2]))+'\\'+phase+'\\'):
            print(path)
            try:
                p=dicom.read_file(path)
                d=p.pixel_array*p.RescaleSlope + p.RescaleIntercept
            except NotImplementedError:
                err.append(path)
                break
            else:
                plt.imshow(d,cmap='gray')
                plt.show()


#xl=xlrd.open_workbook('data.csv')
csv_file=csv.reader(open('data.csv','r'))
#tb=xl.sheet_by_name('Sheet1')
l=[]
for file in csv_file: 
    l.append(file) 
l=l[1:]

#show_CT('arterial phase',l)
#show_CT('venous phase',l)
#print(err)
#t=dicom.read_file('dataset1\\1105\\arterial phase\\10001.dcm')
#print(t)
#img_tmp = np.zeros([512,512])
#img_tmp = t.pixel_array
#img_tmp = img_tmp.astype(np.float32)
#img_tmp = (img_tmp-img_tmp.min())/(img_tmp.max()-img_tmp.min())
#img_tmp = (img_tmp*255).astype(np.uint8)
#plt.imshow(img_tmp,'gray')
#plt.show()
class dataProcess(object):
    def __init__(self, out_rows, out_cols, npy_path = "npy_data", npy_test_path = "npy_test",img_type1 = "dcm", img_type2 = "png"):   
        self.out_rows = out_rows
        self.out_cols = out_cols
        self.img_type1 = img_type1
        self.img_type2 = img_type2
        self.npy_test_path = npy_test_path
        self.npy_path = npy_path
        
    def create_train_data(self):
        print('-'*30)
        print('Creating training images...')
        print('-'*30)
   
  
        for Id in os.listdir('dataset\\'):
            for phase in ['arterial phase','venous phase']:
                time_start=time.time()
                path='dataset\\'+Id+'\\'+phase
                reader = sitk.ImageSeriesReader()
                img_names = reader.GetGDCMSeriesFileNames(path)
                reader.SetFileNames(img_names)
                image = reader.Execute()
                image_array = sitk.GetArrayFromImage(image)[::-1] # z, y, x
                
                imglabels = np.ndarray((len(image_array),self.out_rows,self.out_cols,1), dtype=np.uint8)
                for pidImage in glob.glob(path + "/*.png"):
                    label=load_img(pidImage,grayscale = True)
                    label=img_to_array(label)
                    index=int(pidImage[-11:-9])-1
                    imglabels[index]=label
                
                imgdatas = np.ndarray((len(image_array),self.out_rows,self.out_cols,1), dtype=np.int32)
                for i in range(len(image_array)):
                    for x in range(len(image_array[i])):
                        for y in range(len(image_array[i][0])):
                             if image_array[i][x][y]==-3024:
                                  image_array[i][x][y]=-1000
                    mi=image_array[i].min()
                    for x in range(len(image_array[i])):
                        for y in range(len(image_array[i][0])):
                            image_array[i][x][y]-=mi
                            
                    imgdatas[i] = img_to_array(image_array[i])

                save_path = self.npy_path + '\\' + Id + '\\' + phase
                if not os.path.exists(save_path):
                    os.makedirs(save_path)
                np.save(self.npy_path + '\\' + Id + '\\' + phase + '\\imgs_train.npy', imgdatas)           
                np.save(self.npy_path + '\\' + Id + '\\' + phase + '\\imgs_mask_train.npy', imglabels)
                print('Load Done: ID: {0} phase: {1}'.format(Id, phase))
                print('The number of image:%d'%len(image_array))
                time_end=time.time()
                print('totally cost',time_end-time_start)
    
        print('loading done')        
        
        print('Saving to .npy files done.')
        
    def create_test_data(self):
        print('-'*30)
        print('Creating test images...')
        print('-'*30)
        for Id in os.listdir('test_data\\'):
            for phase in ['arterial phase','venous phase']:
                time_start=time.time()
                path='dataset\\'+Id+'\\'+phase
                reader = sitk.ImageSeriesReader()
                img_names = reader.GetGDCMSeriesFileNames(path)
                reader.SetFileNames(img_names)
                image = reader.Execute()
                image_array = sitk.GetArrayFromImage(image)[::-1] # z, y, x
                
                imgdatas = np.ndarray((len(image_array),self.out_rows,self.out_cols,1), dtype=np.int32)
                for i in range(len(image_array)):
                    for x in range(len(image_array[i])):
                        for y in range(len(image_array[i][0])):
                             if image_array[i][x][y]==-3024:
                                  image_array[i][x][y]=-1000
                    mi=image_array[i].min()
                    for x in range(len(image_array[i])):
                        for y in range(len(image_array[i][0])):
                            image_array[i][x][y]-=mi
                            
                    imgdatas[i] = img_to_array(image_array[i])
                    
                save_path = self.npy_test_path + '\\' + Id + '\\' + phase
                if not os.path.exists(save_path):
                    os.makedirs(save_path)
                np.save(self.npy_test_path + '\\' + Id + '\\' + phase + '\\imgs_test.npy', imgdatas)
                print('Load Done: ID: {0} phase: {1}'.format(Id, phase))
                print('The number of image:%d'%len(image_array))
                time_end=time.time()
                print('totally cost',time_end-time_start)
                    
        print('loading done')
        print('Saving to imgs_test.npy files done.')

    def load_train_data(self):
        print('-'*30)
        print('load train images...')
        print('-'*30)
        imgs_train=[]
        imgs_mask_train=[]
        for Id in os.listdir(self.npy_path)[:1]:
            for phase in ['arterial phase','venous phase']:
                imgs = np.load(self.npy_path+ '\\' + Id + '\\' + phase + '\\imgs_train.npy')
                masks = np.load(self.npy_path+ '\\' + Id + '\\' + phase + '\\imgs_mask_train.npy')

                imgs = imgs.astype('float32')
                masks = masks.astype('float32')
                imgs /= 3000
                #mean = imgs_train.mean(axis = 0)
                #imgs_train -= mean	
                masks /= 3000
                masks[masks > 0.5] = 1
                masks[masks <= 0.5] = 0
                
#                for i in range(imgs.shape[0]):
#                    img = imgs[i]
#                    img = array_to_img(img)
#                    print(i)
#                    plt.imshow(img,'gray')
#                    plt.show()
#                    mask = masks[i]
#                    mask = array_to_img(mask)
#                    plt.imshow(mask,'gray')
#                    plt.show()
                
                imgs_train.append(imgs)
                imgs_mask_train.append(masks)
                
                print('Load Done: ID: {0} phase: {1}'.format(Id, phase))
        print('Load Done All train images')
        return imgs_train,imgs_mask_train

    def load_test_data(self):
        print('-'*30)
        print('load test images...')
        print('-'*30)
        imgs_test=[]
        for Id in os.listdir(self.npy_test_path):
            for phase in ['arterial phase','venous phase']:
                imgs = np.load(self.npy_test_path+ '\\' + Id + '\\' + phase + '\\imgs_test.npy')
                imgs = imgs.astype('float32')
                imgs /= 3000
                #mean = imgs_test.mean(axis = 0)
                #imgs_test -= mean	
                imgs_test.append(imgs)
                print('Load Done: ID: {0} phase: {1}'.format(Id, phase))
        print('Load Done All test images')
                
        return imgs_test

reader = sitk.ImageSeriesReader()
#series_IDs = reader.GetGDCMSeriesIDs('dataset\\1022\\arterial phase')
img_names = reader.GetGDCMSeriesFileNames('dataset\\1023\\arterial phase')
reader.SetFileNames(img_names)
image = reader.Execute()
image_array = sitk.GetArrayFromImage(image)[::-1] # z, y, x

#image = sitk.ReadImage('dataset\\1106\\arterial phase')
#image_array = sitk.GetArrayFromImage(image) # z, y, x


if __name__ == '__main__':
    mydata = dataProcess(512,512)
    
#    mydata.create_train_data()  
    mydata.create_test_data()
    mydata.load_train_data()
    mydata.load_test_data()
    
    
    
#    imgs = np.load('npy_test\\1010\\venous phase\\imgs_test.npy')
  #  masks = np.load('npy_test\\1002\\venous phase\\imgs_mask_train.npy')
#    for i in range(imgs.shape[0]):
#        img = imgs[i]
#        img = array_to_img(img)
#        print(i)
#        plt.imshow(img,'gray')
#        plt.show()
#        mask = masks[i]
#        mask = array_to_img(mask)
#        plt.imshow(mask,'gray')
#        plt.show()
    
#    imglabels = np.ndarray((len(image_array),512,512,1), dtype=np.uint8)
#    path='dataset\\1001\\arterial phase\\'
#    print(glob.glob(path+"/*.[jp][pn]g"))
#    for pidImage in glob.glob(path + "/*.png"):
#        label=load_img(pidImage,grayscale = True)
#        label=img_to_array(label)
#        index=int(pidImage[-11:-9])-1
#        imglabels[index]=label
#        plt.imshow(array_to_img(imglabels[index]),'gray')
#        plt.show()
#        

U-Net神经网络

'''
@Description: 
@Author: JiangQinrui
@Date: 2019-09-22 12:35:32
@Last Editors: JiangQinrui
@LastEditTime: 2019-10-25 13:32:51
'''
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 18 14:10:35 2019

@author: Qinrui Jiang
"""

import os 
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
import numpy as np
import tensorflow as tf
import keras
import glob

from keras.models import *
from keras.layers import Input, merge, Lambda, Conv2D, MaxPooling2D, UpSampling2D, Dropout, Cropping2D
from keras.optimizers import *
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
from keras import backend as keras
from dataprepro import *
#import data
class myUnet(object):

    def __init__(self, img_rows = 512, img_cols = 512):

        self.img_rows = img_rows
        self.img_cols = img_cols

    def expand_dim_backend(x):
        return tf.expand_dims(x,-1)
    
    def load_data(self):

        mydata = dataProcess(self.img_rows, self.img_cols)
        imgs_train, imgs_mask_train = mydata.load_train_data()
        imgs_test = mydata.load_test_data()
        return imgs_train, imgs_mask_train, imgs_test

    def get_unet(self):

        data_inputs = Input((self.img_rows, self.img_cols,1))
		
        conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(data_inputs)
        print("conv1 shape:",conv1.shape)
        conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)
        print("conv1 shape:",conv1.shape)
        pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
        print("pool1 shape:",pool1.shape)

        conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1)
        print("conv2 shape:",conv2.shape)
        conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv2)
        print("conv2 shape:",conv2.shape)
        pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
        print("pool2 shape:",pool2.shape)

        conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool2)
        print("conv3 shape:",conv3.shape)
        conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv3)
        print("conv3 shape:",conv3.shape)
        pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
        print("pool3 shape:",pool3.shape)

        conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool3)
        print("conv4 shape:",conv4.shape)
        conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv4)
        print("conv4 shape:",conv4.shape)
        drop4 = Dropout(0.5)(conv4)
        print("drop4 shape:",drop4.shape)
        pool4 = MaxPooling2D(pool_size=(2, 2))(drop4)
        print("pool4 shape:",pool4.shape)

        conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool4)
        conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv5)
        drop5 = Dropout(0.5)(conv5)

        up6 = Conv2D(512, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(drop5))
        merge6 = merge([drop4,up6], mode='concat',concat_axis = 3)
#        merge6 = keras.concatenate([drop4,up6], axis = 3)
        print("merge6 shape:",merge6.shape)
        #merge6=Lambda(self.expand_dim_backend)(merge6)
        conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge6)
        conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv6)

        up7 = Conv2D(256, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv6))
        merge7 = merge([conv3,up7], mode='concat',concat_axis = 3)
#        merge7 = keras.concatenate([conv3,up7],  axis = 3)
        #merge7=Lambda(self.expand_dim_backend)(merge7)
        conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge7)
        conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv7)

        up8 = Conv2D(128, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv7))
        merge8 = merge([conv2,up8], mode='concat',concat_axis = 3)
    #  merge8 = keras.concatenate([conv2,up8],  axis = 3)
       # merge8=Lambda(self.expand_dim_backend)(merge8)
        conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge8)
        conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv8)

        up9 = Conv2D(64, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv8))
        merge9 = merge([conv1,up9], mode='concat',concat_axis = 3)
       #  merge9 = keras.concatenate([conv1,up9], axis = 3)
      #  merge9=Lambda(self.expand_dim_backend)(merge9)
        conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge9)
        conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)
        conv9 = Conv2D(2, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)
        conv10 = Conv2D(1, 1, activation = 'sigmoid')(conv9)
        print("conv10 shape:",conv10.shape)
        
        model = Model(inputs = [data_inputs], outputs = [conv10])

        model.compile(optimizer = Adam(lr = 1e-4), loss = 'binary_crossentropy', metrics = ['accuracy'])

        return model


    def train(self):

        print("loading data")
        imgs_train, imgs_mask_train, imgs_test = self.load_data()
        print("loading data done")
        model = self.get_unet()
        print("got unet")
        
        print('Fitting model...')
        model_checkpoint = ModelCheckpoint('u-net.hdf5', monitor='loss',verbose=1, save_best_only=True)
        
        long=0
        for i in range(len(imgs_train)):
            long+=len(imgs_train[i])
        train = np.ndarray((long,512,512,1), dtype=np.float32)
        mask = np.ndarray((long,512,512,1), dtype=np.float32)

        index=0
        for i in range(len(imgs_train)):
            for img in imgs_train[i]:
                train[index]=img
                index+=1
            index-=len(imgs_train[i])
            for m in imgs_mask_train[i]:
                mask[index]=m
        
        l=len(train)//5
        l*=5
        
        model.fit(train[:l], mask[:l], batch_size=4, nb_epoch=4, verbose=1,validation_split=0.4, shuffle=True, callbacks=[model_checkpoint])

        print('predict test data')
        for i in range(len(imgs_test)):
            imgs_mask_test = model.predict(imgs_test[i], batch_size=1, verbose=1)
            Id = os.listdir('test_data\\')[i//2]
            if i%2!=0:
                phase='venous phase'
            else:
                phase='arterial phase'
            save_path = 'npy_result' + '\\' + Id + '\\' + phase
            if not os.path.exists(save_path):
                os.makedirs(save_path)
            np.save(save_path+'\\imgs_mask_test.npy', imgs_mask_test)

    def save_img(self):

        print("array to image")
        for Id in os.listdir('npy_result\\'):
            for phase in ['arterial phase','venous phase']:
                imgs = np.load('npy_result'+'\\'+Id+'\\'+phase+'\\imgs_mask_test.npy')
                for i in range(imgs.shape[0]):
                    path="test_data\\" + Id + "\\" + phase
                    print(glob.glob(path + "/*mask.png")[0][-14:-9])
                    index=int(glob.glob(path + "/*mask.png")[0][-14:-9])
                    img = imgs[i]
                    img = array_to_img(img)
                    img.save(path + "\\%d_result.png"%(index+i))



if __name__ == '__main__':
    myunet = myUnet()
    myunet.train()
    myunet.save_img()
2016-12-10 11:14:36 huangchijun11 阅读数 2832
  • Erdas遥感影像处理入门实战教程(GIS思维)

    《Erdas遥感影像处理入门实战教程》以Erdas2010版本经典界面进行实战教学,设计12章内容,正式教学内容总共45课时,15个小时时长。从软件界面开始,到后的应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。课程根据作者实际工作经验,以及采访学员需求,开展课程设计,实用加实战,会是你学习路上的好帮手。

    4416 人正在学习 去看看 黄晓军


深度网络学习调研报告 


 

1.前言...............................................3

1.1课题研究的背景及意义..........................3

1.2国内外研究的现状..............................3

1.3报告的基本内容..............................4

1.4本章小结......................................5

2.深度学习网络的基本思想与意义.......................6

2.1深度学习的起源................................6

2.2深度学习的发展................................7

2.3深度学习的基本思想............................8

2.4深度学习的意义................................9

2.5本章小结.....................................10

3.深度学习网络的基本算法和模型结构..................11

3.1深度学习的常用模型结构.......................11

3.2深度学习的基本算法与改进.....................14

3.2.1深度学习的基本算法...........................14

3.2.2深度学习算法的新进.........................15

3.3本章小结.....................................17

4.深度学习网络与多层前向神经网络的比较..............18

4.1深度学习与浅层学习的区别.....................18

4.2网络模型结构的比较...........................19

4.2训练方法的比较...............................19

4.3本章小结.....................................21

5.深度学习网络的应用................................22

5.1深度学习与大数据时代的联系...................22

5.2深度学习与计算机视觉.........................23

5.3深度学习的具体应用...........................23

5.4本章小结.....................................28

6.深度学习网络的未来发展前景........................29

6.1深度学习面临的困难...........................29

6.2深度学习的局限性.............................30

6.3深度学习的未来展望与趋势.....................31

6.4本章小结.....................................34

 ..............................................35

参考文献及浏览网页..................................36

 

1前言

随着人类跨入学习型社会的步伐越走越快,学会学习、终身学习等学习能力成为人类一项最基本的生存能力。但是,衡量学习者是否学会了如何学习的依据,不是学习者已掌握的知识数量、达到的知识广度,而是其整合信息以建构知识意义并灵活地加以运用,最终解决实际问题的能力,即深度学习能力。因此,随着全球对信息化背景下学生深度学习能力的高度重视,近年来有关深度学习的研究也受到国内外学者的广泛关注[1]

1.1课题研究的背景及意义

神经网络的学习与研究在近十年是一个很热门的研究课题,而最终这些研究成果部分可以体现在我们的日常生活中,神经网络特有的非线性适应性信息处理能力,克服了传统人工智能方法对于直觉的缺陷,使之在神经专家系统、模式识别、智能控制、组合优化、预测等领域得到成功应用。神经网络与其它传统方法相结,将推动人工智能和信息处理技术不断发展。近年来,神经网络在模拟人类的认知的道路上更加深入发展,并与模糊系统、遗传算法、进化机制等结合,形成计算智能,成为人工智能的一个重要方向。虽然神经网络具有这么多的优点与可实用性,但是浅层神经网络在有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受限,已经适应不了高速科技与信息时代的发展所引发的一系列深层次问题,故而引发人们对深层网络的构建、学习与发展。

1.2国内外研究的现状

      

          自2006 年以来,深度学习在学术界持续升温,美国,加拿大,欧洲相继成为此领域的科研重镇。2010年美国国防部先进研究项目局首次资助深度学习,参与方包括斯坦福大学、纽约大学和NEC美国研究院等机构。2011 年,微软语音识别采用深度学习技术降低语音识别错误率20-30%,是该领域十多年来最大的突破性进展。2012年是深度学习研究和应用爆发的一年,深度学习被应用于著名生物制药公司黙克的分子药性预测问题, 从各类分子中学习发现那些可能成为药物的分子获得世界最好效果;谷歌的Google Brain 项目用16000 个处理器的服务器集群构建了一套超过10亿个节点的具备自主学习能力的神经网络,能自动从输入的大量数据中归纳出概念体系,图片搜索、无人驾驶汽车和Google  Glass 都将会从中受益。6月,Google公司的深度学习系统在识别物体的精确度上比上一代系统提高了一倍,并且大幅度削减了Android系统语音识别系统的错误率。百度引入深度学习以后,语音识别效果的提升超过了以往业界在过15年里所取得的成绩。12月,微软亚洲研究院展示了中英即时口译系统,错误率仅为7%,而且发音十分顺畅[2]

  2013年,欧洲委员会发起模仿人脑的超级计算机项目,计划历时10年投入16亿美元,由全球80个机构的超过200名研究人员共同参与,希望在理解人类大脑工作方式上取得重大进展,并推动更多能力强大的新型计算机的研发,就资助力度,项目范围,和雄心而言,该项目堪比于大型强子对撞机项目。库兹韦尔当前的目标就是帮助计算机理解自然语言并以自然语源与用户对话,虽然库兹韦尔的目标还要很多年才能实现。他希望将深度学习算法用到解决自然语言的问题上,让计算机能够发现语言的问题,解决语言的问题。

1.3本报告阐述的基本内容

主要流程图如下:

                                                            

                                                                                                           1-1报告内容流程图

第一部分:深度学习的基本思想与意义;

第二部分:深度学习的基本算法与网络结构;

第三部分:深度学习与多层前向神经网络的比较,分析其相同点与不同点;

第四部分:深度学习网络的应用领域以及目前已经取得的一些成果;

第五部分:深度学习网络的未来发展趋势与前景,及其发展的局限性;

1.4本章小结

       本章简单介绍了课题研究的背景意义、国内外的研究现状、本报告的主要内容,引出课题研究的几个模块和全文报告的书写规律。
               

2.深度学习网络的基本思想与意义

2.1深度学习的起源

深度学习(Deep Learning)是机器学习中一个非常接近AI的领域,其动机在于建立、模拟人脑进行分析学习的神经网络。深度学习属于无监督学习。

深度学习的概念源于人工神经网络的研究。深度学习是相对于简单学习而言的,目前多数分类、回归等学习算法都属于简单学习,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。含多隐层的多层感知器就是一种深度学习结构。深度学习模拟更多的神经层神经活动[3],通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示,深度学习的示意图如图2所示。

                   

                                   2深度学习的简单示意图


   图灵在1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。2006年前,尝试训练深度架构都失败了:训练一个深度有监督前馈神经网络趋向于产生坏的结果(同时在训练和测试误差中),然后将其变浅为1(1或者2个隐层)

   深度学习的概念由Hinton等人于2006年提出。基于深信度网(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。

2.2机器学习的两次浪潮对深度学习的发展

  机器学习的两次浪潮:从浅层学习到深度学习[4]


  在解释深度学习之前,我们需要了解什么是机器学习。机器学习是人工智能的一个分支,而在很多时候,几乎成为人工智能的代名词。简单来说,机器学习就是通过算法,使得机器能从大量历史数据中学习规律,从而对新的样本做智能识别或对未来做预测。从1980年代末期以来,机器学习的发展大致经历了两次浪潮:浅层学习(ShallowLearning)和深度学习(Deep Learning)。需要指出是,机器学习历史阶段的划分是一个仁者见仁,智者见智的事情,从不同的维度来看会得到不同的结论。这里我们是从机器学习模型的层次结构来看的。

  第一次浪潮:浅层学习

  1980年代末期,用于人工神经网络的反向传播算法(也叫Back Propagation算法或者BP算法)的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用BP算法可以让一个人工神经网络模型从大量训练样本中学习出统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显示出优越性。这个时候的人工神经网络,虽然也被称作多层感知机(Multi-layer Perceptron),但实际上是一种只含有一层隐层节点的浅层模型。

  90年代,各种各样的浅层机器学习模型相继被提出,比如支撑向量机(SVMSupportVector Machines)、Boosting、最大熵方法(例如LRLogistic Regression)等。这些模型的结构基本上可以看成带有一层隐层节点(如SVMBoosting),或没有隐层节点(如LR)。这些模型在无论是理论分析还是应用都获得了巨大的成功。相比较之下,由于理论分析的难度,加上训练方法需要很多经验和技巧,所以这个时期浅层人工神经网络反而相对较为沉寂。

  2000年以来互联网的高速发展,对大数据的智能化分析和预测提出了巨大需求,浅层学习模型在互联网应用上获得了巨大成功。最成功的应用包括搜索广告系统(比如GoogleAdWords、百度的凤巢系统)的广告点击率CTR预估、网页搜索排序(例如Yahoo!和微软的搜索引擎)、垃圾邮件过滤系统、基于内容的推荐系统等。

  第二次浪潮:深度学习

  2006年,加拿大多伦多大学教授、机器学习领域泰斗——Geoffrey Hinton和他的学生Ruslan Salakhutdinov在顶尖学术刊物《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要的信息:1.很多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2.深度神经网络在训练上的难度,可以通过逐层初始化(Layer-wise Pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。

  自2006年以来,深度学习在学术界持续升温。不论是国内外的专家学者还是各个国家的国防部门,还有一些大型的网络科技公司都对深度学习产生了浓厚的学习兴趣。正如文章开头国内外研究现状中所描述的,今天Google、微软、百度等知名的拥有大数据的高科技公司争相投入资源,占领深度学习的技术制高点,正是因为它们都看到了在大数据时代,更加复杂且更加强大的深度模型能深刻揭示海量数据里所承载的复杂而丰富的信息,并对未来或未知事件做更精准的预测。

2.3深度学习的基本思想

  

  假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>…..=>Sn=> O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失,保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失[23],即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。现在回到我们的主题Deep Learning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1…, Sn。对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。

  另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的Deep Learning方法。上述就是Deep Learning的基本思想。

                                            

 

如上图所示把学习结构看作一个网络,则深度学习的核心思路如下:

无监督学习用于每一层网络的pre-train

每次用无监督学习只训练一层,将其训练结果作为其高一层的输入;

用自顶而下的监督算法去调整所有层

2.4深度学习的意义

面对海量数据,深度学习算法可以做到传统人工智能算法无法做到的事情,而且输出结果会随着数据处理量的增大而更加准确。目前看来,深度学习是实现人工智能最有效、也是取得成效最大的实施方法。AndrewNg提到目前百度大脑的新算法就是属于深度学习,他虽然没有具体指明该算法的领先程度,但却强调了其在处理数据方面比传统人工智能算法存在的优越性,并可以使人工智能实现一种正循环。

 深度学习带来了人工智能的正循环,深度学习算法可以使机器自己学会世界上的一些概念,也就是机器将具备一定的人类般的学习和思考能力。人类自身的学习能力可以帮助我们自行认识世界,而当机器当过模拟人脑具备了这一能力之后,就可以在一定程度上取代我们部分脑力工作。就像在工业革命和电力革命的影响力,我们自身从体力劳动中解放出来一样,在深度学习所带来的人工智能革命下,我们同样可以将脑力工作外包给机器。
   
深度学习使机器更加聪明,这些机器智能将不断下落到具体的互联网应用中,带给我们更加智能的服务。比如说,通过视觉获取和处理图像、通过声音讲出语言是人类最自然的与外界沟通的方式,但传统的计算机服务却无法从本质上读懂我们这些内容,当我们进行图像搜索或者向计算机发送某项指令时,我们需要预先在大脑中做一遍处理,将我们原本要表达的意思转化成计算机能够读懂的文本信息,然后手动输入到计算机并获得结果。但在机器学习的帮助下,我们随意把一张图片丢给电脑就能返回结果,我们直接用语言就可以来命令计算机来为我们提供各种服务。


2.5本章小结

    本章逐一对深度学习的起源、发展、基本思想以及意义进行了详细的介绍,为下面报告的研究做准备,给出了一个队深度学习网络的基本解释。

 

 

深度学习网络的基本算法与模型结构

3.1深度学习网络的常用模型

AutoEncoder自动编码器[20]

       Deep Learning最简单的一种方法是利用人工神经网络的特点[25],人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。

Sparse Coding稀疏编码

  如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a11 +a22+….+ ann Φi是基,ai是系数,我们可以得到这样一个优化问题:

Min |I – O|,其中I表示输入,O表示输出。

 通过求解这个最优化式子,我们可以求得系数ai和基Φi,这些系数和基就是输入的另外一种近似表达。

                               

  因此,它们可以用来表达输入I,这个过程也是自动学习得到的。如果我们在上述式子上加上L1Regularity限制,得到:

Min |I – O| + u*(|a1| + |a2| + … +|an |)

  这种方法被称为SparseCoding。通俗的说,就是将一个信号表示为一组基的线性组合,而且要求只需要较少的几个基就可以将信号表示出来。稀疏性定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。要求系数 ai 是稀疏的意思就是说:对于一组输入向量,我们只想有尽可能少的几个系数远大于零。选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升(人脑有大量的神经元,但对于某些图像或者边缘只有很少的神经元兴奋,其他都处于抑制状态)。

 稀疏编码算法是一种无监督学习方法,它用来寻找一组超完备基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使我们方便地找到一组完备基向量,但是这里我们想要做的是找到一组超完备基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来说,系数ai不再由输入向量唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准稀疏性来解决因超完备而导致的退化(degeneracy)问题。

Restricted Boltzmann Machine (RBM)限制波尔兹曼机

     假设有一个二部图,每一层的节点之间没有链接,一层是可视层,即输入数据层(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值),同时假设全概率分布p(v,h)满足Boltzmann分布,我们称这个模型是RestrictedBoltzmannMachine (RBM)

                                                 

     下面我们来看看为什么它是Deep Learning方法。首先,这个模型因为是二部图,所以在已知v的情况下,所有的隐藏节点之间是条件独立的(因为节点之间不存在连接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隐藏层h的情况下,所有的可视节点都是条件独立的。同时又由于所有的vh满足Boltzmann分布,因此,当输入v的时候,通过p(h|v)可以得到隐藏层h,而得到隐藏层h之后,通过p(v|h)又能得到可视层,通过调整参数,我们就是要使得从隐藏层得到的可视层v1与原来的可视层v如果一样,那么得到的隐藏层就是可视层另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种Deep Learning方法。

Deep Belief Networks深信度网络

    DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了以下问题:

1)需要为训练提供一个有标签的样本集;

2)学习过程较慢;

3)不适当的参数选择会导致学习收敛于局部最优解。

                                             

     DBNs由多个限制玻尔兹曼机(Restricted BoltzmannMachines)层组成,一个典型的神经网络类型如图三所示。这些网络被限制为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。

Convolutional Neural Networks卷积神经网络

      卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

      CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。

       CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。

 

3.2深度学习的基本算法与改进

3.2.1深度学习的基本算法

实验结果表明,对深度结构神经网络采用随机初始化的方法,基于梯度的优化使训练结果陷入局部极值,而找不到全局最优值,并且随着网络结构层次的加深,更难以得到好的泛化性能,使得深度结构神经网络在随机初始化后得到的学习结果甚至不如只有一个或两个隐层的浅结构神经网络得到的学习结果好[8]。由于随机初始化深度结构神经网络的参数得到的训练结果和泛化性能都很不理想,在 2006 年以前,深度结构神经网络在机器学习领域文献中并没有进行过多讨论6,7

通过实验研究发现,用无监督学习算法对深度结构神经网络进行逐层预训练,能够得到较好的学习结果。最初的实验对每层采用RBM生成模型,后来的实验采用自编码模型来训练每一层两种模型得到相似的实验结果。一些实验和研究结果证明了无监督预训练相比随机初始化具有很大的优势,无监督预训练不仅初始化网络得到好的初始参数值,而且可以提取关于输入分布的有用信息,有助于网络找到更好的全局最优解910

对深度学习来说,无监督学习和半监督学习是成功的学习算法的关键组成部分,主要原因包括以下几个方面[11]:

a)与半监督学习类似,深度学习中缺少有类标签的样本,并且样例大多无类标签。

b)逐层的无监督学习利用结构层上的可用信息进行学习,避免了监督学习梯度传播的问题,可减少对监督准则函数梯度给出的不可靠更新方向的依赖。

c)无监督学习使得监督学习的参数进入一个合适的预置区域内,在此区域内进行梯度下降能够得到很好的解。

d)在利用深度结构神经网络构造一个监督分类器时,无监督学习可看做学习先验信息,使得深度结构神经网络训练结果的参数在大多情况下都具有意义。

e)在深度结构神经网络的每一层采用无监督学习将一个问题分解成若干与多重表示水平提取有关的子问题,是一种常用的可行方法,可提取输入分布较高水平表示的重要特征信息。

基于上述思想,Hinton等人在 2006年引入了 DBN并给出了一种训练该网络的贪婪逐层预训练算法6。贪婪逐层无监督预训练学习的基本思想为:首先采用无监督学习算法对深度结构神经网络的较低层进行训练,生成第一层深度结构神经网络的初始参数值;然后将第一层的输出作为另外一层的输入,同样采用无监督学习算法对该层参数进行初始化。在对多层进行初始化后,用监督学习算法对整个深度结构神经网络进行微调,得到的学习性能具有很大程度的提高。

3.2.2深度学习网络算法的新进展

1)深度费希尔映射方法

Wong等人12提出一种新的特征提取方法———正则化深度费希尔映射(regularized deep Fish-er mapping,RDFM)方法,学习从样本空间到特征空间的显式映射,根据 Fisher准则用深度结构神经网络提高特征的区分度。深度结构神经网络具有深度非局部学习结构,从更少的样本中学习变化很大的数据集中的特征,显示出比核方法更强的特征识别能力,同时RDFM方法的学习过程由于引入正则化因子,解决了学习能力过强带来的过拟合问题。在各种类型的数据集上进行实验,得到的结果说明了在深度学习微调阶段运用无监督正则化的必要性。

2)非线性变换方法

aiko等人13 提出了一种非线性变换方法,该变换方法使得多层感知器(multi-layer perceptronMLP)网络的每个隐神经元的输出具有零输出和平均值上的零斜率,使学习 MLP 变得更容易。将学习整个输入输出映射函数的线性部分和非线性部分尽可能分开,用shortcut 权值(shortcut weight)建立线性映射模型,令 Fisher信息阵接近对角阵,使得标准梯度接近自然梯度。通过实验证明非线性变换方法的有效性,该变换使得基本随机梯度学习与当前的学习算法在速度上不相上下,并有助于找到泛化性能更好的分类器。用这种非线性变换方法实现的深度无监督自编码模型进行图像分类和学习图像的低维表示的实验,说明这些变换有助于学习深度至少达到五个隐层的深度结构神经网络,证明了变换的有效性,提高了基本随机梯度学习算法的速度,有助于找到泛化性更好的分类器。

3)稀疏编码对称机算法

anzato等人14提出一种新的有效的无监督学习算法———稀疏编码对称机(sparse encodingsymmetric machineSESM),能够在无须归一化的情况下有效产生稀疏表示。SESM的损失函数是重构误差和稀疏罚函数的加权总和,基于该损失函数比较和选择不同的无监督学习机,提出一种与文献15算法相关的迭代在线学习算法,并在理论和实验上将SESM与 RBM PCA 进行比较,在手写体数字识别 MNIST数据集和实际图像数据集上进行实验,表明该方法的优越性         

4)迁移学习算法

在许多常见学习场景中训练和测试数据集中的类标签不同,必须保证训练和测试数据集中的相似性进行迁移学习。Mesnil等人研究了用于无监督迁移学习场景中学习表示的不同种类模型结构,将多个不同结构的层堆栈使用无监督学习算法用于五个学习任务,并研究了用于少量已标记训练样本的简单线性分类器堆栈深度结构学习算法。Ben-gio研究了无监督迁移学习问题,讨论了无监督预训练有用的原因,如何在迁移学习场景中利用无监督预训练,以及在什么情况下需要注意从不同数据分布得到的样例上的预测问题。

5)自然语言解析算法

Collobert基于深度递归卷积图变换网络(graph transformer networkGTN)提出一种快速可扩展的判别算法用于自然语言解析,将文法解析树分解到堆栈层中,只用极少的基本文本特征,得到的性能与现有的判别解析器和标准解析器的性能相似,而在速度上有了很大提升。

6)学习率自适应方法

学习率自适应方法可用于提高深度结构神经网络训练的收敛性并且去除超参数中的学习率参数,其中包括全局学习率、层次学习率、神经元学习率和参数学习率等。最近研究人员提出了一些新的学习率自适应方法,如 Duchi 等人提出的自适应梯度方法和 Schaul 等人提出的学习率自适应方法;Hinton提出了收缩学习率方法使得平均权值更新在权值大小的 1/1000 数量级上;Leoux等人提出自然梯度的对角低秩在线近似方法,并说明该算法在一些学习场景中能加速训练过程。

3.3本章小结

       本章对深度学习的五种常用模型进行了简单的介绍,又阐述了深度学习的基本算法以及最近几年的算法的新进展。

 

 

 

4.深度学习网络与多层前向神经网络的比较

    

    深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习是无监督学习的一种。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

4.1深度学习与浅层学习的区别

深度学习本质:通过构建多隐层的模型和海量训练数据(可为无标签数据),来学习更有用的特征,从而最终提升分类或预测的准确性。“深度模型”是手段,“特征学习”是目的。

与浅层学习区别:

1)强调了模型结构的深度,通常有5-10多层的隐层节点;

2)明确突出了特征学习的重要性,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

下图简单把深度学习与浅层学习做了比较[16]

                      


4.2 网络模型结构的比较


Deep learning与传统的神经网络之间有相同的地方[27]也有很多不同。二者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。

而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是backpropagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deeplearning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用back propagation的机制,对于一个deep network7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradientdiffusion(梯度扩散)。

                             

4.3训练方法的比较

4.3.1多层前向神经网络

 BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源[28]

BP算法存在的问题:

1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;

4.3.2 Deep learning训练过程

如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。

 2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是:

1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。

2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。

将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于认知,向下的权重用于生成。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。

1wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的

2sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念

 Deep learning训练过程具体如下:

1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是featurelearning过程):具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;

2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的featurelearning过程。

4.4本章小结

  本章先简单概括介绍了深度学习与浅层学习的区别,又在网络模型结构和训练过程上分别对深度学习与多层前向神经网络做了详细的比较。

 

 

5.深度学习网络的应用

5.1深度学习与大数据时代的联系

在工业界一直有个很流行的观点:在大数据条件下,简单的机器学习模型会比复杂模型更加有效。例如,在很多的大数据应用中,最简单的线性模型得到大量使用。而最近深度学习的惊人进展,促使我们也许到了要重新思考这个观点的时候。简而言之,在大数据情况下,也许只有比较复杂的模型,或者说表达能力强的模型,才能充分发掘海量数据中蕴藏的丰富信息。运用更强大的深度模型,也许我们能从大数据[26]中发掘出更多有价值的信息和知识。

语音识别已经是一个大数据的机器学习问题,在其声学建模部分,通常面临的是十亿到千亿级别的训练样本。在Google的一个语音识别实验中,发现训练后的DNN对训练样本和测试样本的预测误差基本相当。这是非常违反常识的,因为通常模型在训练样本上的预测误差会显著小于测试样本。因此,只有一个解释,就是由于大数据里含有丰富的信息维度,即便是DNN这样的高容量复杂模型也是处于欠拟合的状态,更不必说传统的GMM声学模型了。所以从这个例子中我们看出,大数据需要深度学习。大数据的发展也促进了深度学习的深层次挖掘学习,这是一个相互促进的过程,相信未来这两者一定会有更多的相互碰撞发展。

5.2深度学习与计算机视觉

计算机视觉[29]的终极目标是“建立一个智能的系统,能够让计算机和机器人像人一样看懂世界,也可能超越人类,比人类更能看懂这个世界”。深度学习,作为人工智能的一种形式,通过组合低层特征形成具有抽象表示的深层神经网络,模拟人脑的思维进行感知、识别和记忆,突破了低层特征到高层语义理解的障碍,极大地提升了机器在视觉特征的提取、语义分析和理解方面的智能处理水平。随着计算机技术和人工智能的发展,期待计算机视觉研究取得更大的突破,在社会生活中得到更加广泛的应用!

一群来自美国麻省理工学院(MIT)电脑科学与人工智能实验室(Computer Science andArtificial Intelligence Laboratory, CASIL)的研究团队创造一个可以预测影像或照片中,让人容易忘记与记忆的区域。目前研究团队正在拟定以这项功能为原型,设计一个能够帮助使用者的照片调整成容易让人印象深刻的应用程序(app)。假如这款应用程序如期上架,将会对教学、行销和记忆领域有所帮助。

                                                  

 

5.3深度学习具体的应用

5.3.1搜索引擎

  

   由于计算机的高度普及,很多人可能已经固化了“搜索”的印象:面对屏幕上的一个输入框,敲入一串词语,电脑返回一堆链接,用户再逐个点开查看哪个是自己需要的内容。这是传统的搜索,其交互方式是人工提炼出关键词输入,才返回答案。所以使用搜索引擎其实是一种技术,考验的是人能否准确观察问题、恰当提炼主题词,做到这些才有可能得到自己想要的信息。这就与一切搜索引擎“公平地为每个人提供信息”的初衷相悖了。

   但当我们要教会从没接触过电脑的父母这一搜索过程时,就发现它与人类天生的本能并不相同:父母们往往会指着一株不知名的植物,问电脑是否能告诉我们这是什么;他们也并不习惯键入文字内容,甚至不会输入法,他们更希望对着电脑说一句“明天什么天气”就能得到答案。

   2013年初,百度建立了深度学习研究院。百度多媒体业务负责人用一个叫“明星脸搜索”的产品演示了人脸搜索能力。改产品的功能是实验对象实时拍一张照片,百度可以搜索出这张照片最像哪个明星。令人惊奇的是,在百度作为参考列出的互联网图片搜索照片中出现的第一张图片就是此次实验对象10年前拍的一张照片。也就是说,在没有任何其他条件限定的前提下,百度根据一个现实场景,找到了一个确定的人。

   深度学习的技术配合上大数据的储备,语音搜索、图像搜索等新兴技术就不再仅仅是技术的噱头,而是将搜索用户从数亿拓展到数十亿。这也是Google、苹果和百度纷纷在语音搜索上推出新产品的原因。

   另外值得一提的是,在今年国际机器学习大会ICML2013中,Andrew的学生仅用价值2万美元的GPU集群,就做到了与引言中提到的Google曾经用约100万美元做的猫脸识别软件相同的准确率。

5.3.2语音和音频

   Yu等人在文献35中介绍了深度学习的基本概念、DBN等常用的深度学习模型以及流行且有效的深度学习算法,包括RBM和基于降噪自编码模型的预训练方法,并指出在许多信号处理应用中,特别是对语音和音频信号处理,深度学习技术有好的学习结果。通过综合深度学习模型强大的判别训练和连续建模能力,深度学习已成功应用于大规模词汇连续语音识别任务。卷积 DBN和堆栈自编码网络等深度结构神经网络已经被用于语音和音频数据处理中,如音乐艺术家流派分类、说话者识别、说话者性别分类和语音分类等,得到非常好的学习结果。堆栈多层条件随机场(conditional random fieldCF)等其他深度结构神经网络结构模型也成功用于语言识别、语音识别、序列标记36和置信度校准等语音相关任务。Lee等人37首次用无监督卷积神经网络方法将 DBN用于声学信号处理,说明该方法在讲话者、性格和音素检测上表现出比梅尔倒谱系数(Melfrequency cepstrum coefficientMFCC)更优越的性能。Hamel等人38 DBN用于音乐类型识别和自动标记问题,将原始级光谱作为 DBN的输入,用贪婪预训练和监督微调方法进行训练,得到的分类精度比 MFCC有很大改进。Schmidt等人39 用基于回归的 DBN 直接从光谱中学习特征,将系统应用于特定的音乐情感识别问题,并且该系统也可以应用于任何基于回归的音频特征学习问题。Deng等人40 将堆栈自编码网络用于语音特征编码问题,以最小的重构误差将数据压缩到预先设定长度的表示。

5.3.3图像和视频

  1)手写体字符识别 Bengio等人41运用统计学习理论和大量的实验工作证明了深度学习算法非常具有潜力,说明数据中间层表示可以被来自不同分布而相关的任务和样例共享,产生更好的学习效果,并且在有 62个类别的大规模手写体字符识别场景上进行实验,用多任务场景和扰动样例来得到分布外样例,并得到非常好的实验结果。Lee等人42对 RBM进行拓展,学习到的模型使其具有稀疏性,可用于有效地学习数字字符和自然图像特征。Hinton等人关于深度学习的研究说明了如何训练深度 S 型神经网络来产生对手写体数字文本有用的表示,用到的主要思想是贪婪逐层预训练RBM之后再进行微调4344

  2)人脸识别 Nair等人45 用噪声 rectified线性单元组成的深度结构神经网络将深度学习应用于目标识别和人脸验证;anzato等人15提出深度产生式模型用于人脸识别;Susskind等人46将因式分解的三路 RBM 用于建立成对人脸图像的模型。Luo等人47 研究如何从局部遮挡的人脸图像解析面部成分,提出一种新的人脸解析器,将人脸成分分割重构为重叠的形态数据过程,首先在块等级和组等级上检测人脸,在 DBN 上执行产生式训练过程,再用逻辑斯蒂回归进行判别式调整,然后计算对像素敏感的标记映射。从 LFWBioIDCUFSF三个数据集中挑选 2 239个图像进行实验,说明了该方法的有效性,该方法不仅对局部遮挡的人脸图像具有鲁棒性,而且也为人脸分析和人脸合成提供了更丰富的信息。

  3)图像识别和检索 DBN和堆栈自编码网络在单个图像识别任务中表现出很好的性能,成功用于生成紧凑而有意义的图像检索表示形式,并且已用于大型图像检索任务中,得到非常好的结果6。图像识别方面比 DBN 更一般的方法在文献48中有所描述。Taylor等人49将条件 DBN用于视频排序和人类动作合成,条件 DBN使得 DBN的权值与之前的数据相关联,可以提高训练的有效性。Lee和 Raina等人5051 用稀疏编码和 DBN 从自然图像中学习有效特征表示。Nair等人52提出改进的 DBN,该模型的顶层模型用三阶 BM,他们将这种模型用于三维目标识别任务 NOB数据集上,实验结果显示出训练得到了很低的预测误差率。Tang等人53 提出两种策略来提高 DBN 的鲁棒性,首先将 DBN的第一层具有稀疏连接结构引入正则化方法,接着提出一种概率降噪算法,这些技术在高噪声图像识别任务和随机噪声的鲁棒性方面显示出其有效性。Lee等人54提出一种深度学习方法使脑图像分割自动化,用卷积神经网络建立用于脑图像分割的判别特征,能自动从人类专家提供的类标签中进行学习,通过实验验证该方法在自动多类脑图像分割方面显示出优越的性能,表明该方法可以替代已有的模板图像分割方法,减少了图像分割过程对人类专家的干预和对先验信息的需求。

5.3.4语言处理和信息检索

除了语音和图像,深度学习的另一个应用领域问题是自然语言处理(NLP)。经过几十年的发展,基于统计的模型已经成为NLP的主流,但作为统计方法之一的人工神经网络在NLP领域几乎没有受到重视。最早应用神经网络的NLP问题是语言模型。加拿大蒙特利尔大学教授Yoshua Bengio等人于2003年提出用embedding的方法将词映射到一个矢量表示空间,然后用非线性神经网络来表示N-Gram模型。世界上最早的最早的深度学习用于NLP的研究工作诞生于NEC美国研究院,其研究员Ronan CollobertJason Weston2008年开始采用embedding和多层一维卷积的结构,用于POS TaggingChunkingNamed Entity RecognitionSemantic RoleLabeling等四个典型NLP问题。值得注意的是,他们将同一个模型用于不同任务,都能取得与业界最前沿相当的准确率。最近以来,斯坦福大学教授Chris Manning等人在将深度学习用于NLP的工作也值得关注。

文献55阐述了深度学习用于自然语言处理的基本动机、思路、模型和学习算法,提出基本的神经网络模型和训练算法,并指出这些方法在语言模型、POS标记、命名实体识别和情感分析等任务中表现出很好的性能。深度学习已经被成功应用于文本、图像和音频等单模态无监督特征学习。Salakhutdi-nov Lecun等人将 DBN和堆栈自编码网络用于对文档建立索引以便检索;Deng等人也将该想法应用于音频文档检索问题中;Collobert等人提出用卷积 DBN作为模型同时解决许多经典问题,如词性标记、名实体标记、语义角色识别和相似词识别等;Deselaers等人将 DBN用于解决机器音译问题。Ngiam等人提出深度学习的一种新应用———在多模态上学习特征,提出一系列学习任务,说明如何训练深度结构神经网络,证明在特征学习时使用多个模态有助于学习得到更好的特征,并说明如何学习模态之间的共享表示,在视听语音分类 CUAVE AVLetters数据集上对提出的方法进行了验证。在线评价和舆情分析的需求使得情感分类问题成为热点研究问题,Glorot等人将深度学习方法用于域自适应情感分类器设计问题,用基于有稀疏rectified单元的堆栈降噪自编码网络从无监督的在线评价和建议中提取有意义的特征表示,在四种亚马逊产品的评价数据上进行实验,结果说明用高阶特征表示训练的情感分类器的学习性能明显优于当前的其他方法;另外该方法允许在 22 个领域的更大的工业级数据集上成功执行域自适应学习方法,在很大程度上提高了分类器的泛化性能。

5.3.5深度学习在教学实践上的应用

深度学习与浅层学习相对,最早源于美国学者FerenceMarton Roger Saljo的实验教学法研究,按照获取和加工信息的方式把学习者分为浅层加工者和深层加工者,即对应浅层学习和深度学习。国外学者早已把深度学习理论应用到教育实践中,Mellanby. Jane将深度学习中的批判思维用于牛津大学高考录取指标中;WeeHoe Tan把深度学习应用到生物课程教学中。国内对深度学习起步较晚,研究也主要集中在对深度学习概念的理解、特征的详细阐述及促进深度学习的策略研究。深度学习是一种旨在提高学习能力、实践能力、创新能力的学习方式,学习者在理解的基础上同已有知识建立联系,并能灵活应用解决实际问题。深度学习是积极主动的自主学习,而不是消极的被动学习;强调新旧知识的有机联系,而不是孤立的知识碎片;强调学用结合的有意义的学习,而不是死记硬背的机械学习;强调自主探究的研究性学习,而不是盲目认同的接受式学习。由此可见,深度学习通过调动学习者的积极性,注重知识间的内在联系,强调知识应用,在学习者自主探究的过程中培养学生的终身学习能力、知识应用能力和知识创新能力,适合当今知识时代培养创新人才的需要。文献 [56] 把研究性教学应用到计算机网络的实践教学中,从教学的各个环节调动学生的积极性,发挥学生的主体作用,培养学生自学能力。结合深度学习思想和文献 [56]中的教学策略,本文探讨把深度学习思想引入到路由与交换技术课程的实践教学中,从实践教学安排到课堂内外每个环节的安排和实施进行介绍。

                                                                

5.4本章小结

  本章先简单概括介绍了深度学习与大数据和计算机视觉的关系,又列举了深度学习的几个主要应用的方面,可见深度学习的应用具有广泛性,影响了很多领域的发展,不论是科学还是实际的使用上都具有很重要的意义。

 

 

6.深度学习的局限性与未来的展望

6.1深度学习面临的困难

   研究的困难仍在于我们无法完全掌握人类大脑的工作原理,但科学家目前在这方面进展飞速。中国的科学家正在研究一个新的大脑图谱,他们将之命名为“脑网络穹顶”项目。在美国,随着奥巴马政府宣布将支持筹建一项跨学科的科研项目“基于神经科学技术创新的人脑研究”,许多类似的项目正雨后春笋般得涌现,“大神经网络时代”[18]已经到来。

   如果我们能够搞清楚人类大脑成千上万的神经元如何互相连结以及中枢神经系统存储和处理信息的原理,那么像吴恩达这样的工程师对于“人工大脑”的设想就能够更加清晰,对于人脑的研究成果和数据将能购帮助深度学习算法的研究,也能加速诸如计算机“视觉”、语言分析,以及苹果和谷歌等公司为智能手机提供的语音识别等技术的发展。

   引用加州大学伯克利分校计算神经科学家布鲁诺•奥尔斯豪森的一句话——我们要学习生物生存使用的技巧,问题的关键在于生物将秘密隐藏得太深了,我们还没有掌握这些秘密所需要的工具。

理论问题 

理论问题主要体现在两个方面,一个是统计学习方面的,另一个是计算方面的。我们已经知道,深度模型相比较于浅层模型有更好的对非线性函数的表示能力。具体来说,对于任意一个非线性函数,根据神经网络的Universal Approximation Theory,我们一定能找到一个浅层网络和一个深度网络来足够好地表示。但深度网络只需要少得多的参数。但可表示性不代表可学习性。我们需要了解深度学习的样本复杂度,也就是我们需要多少训练样本才能学习到足够好的深度模型。从另一方面来说,我们需要多少计算资源才能通过训练得到更好的模型?理想的计算优化方法是什么?由于深度模型都是非凸函数,这方面的理论研究极其困难。

建模问题

在推进深度学习的学习理论和计算理论的同时,我们是否可以提出新的分层模型,使其不但具有传统深度模型所具有的强大表示能力,还具有其他的好处,比如更容易做理论分析。另外,针对具体应用问题,我们如何设计一个最适合的深度模型来解决问题?我们已经看到,无论在图像深度模型,还是语言深度模型,似乎都存在深度和卷积等共同的信息处理结构。甚至对于语音声学模型,研究人员也在探索卷积深度网络。那么一个更有意思的问题是,是否存在可能建立一个通用的深度模型或深度模型的建模语言,作为统一的框架来处理语音、图像和语言?

工程问题

需要指出的是,对于互联网公司而言,如何在工程上利用大规模的并行计算平台来实现海量数据训练,是各家公司从事深度学习技术研发首先要解决的问题。传统的大数据平台如Hadoop,由于数据处理的Latency太高,显然不适合需要频繁迭代的深度学习。现有成熟的DNN训练技术大都是采用随机梯度法(SGD)方法训练的。这种方法本身不可能在多个计算机之间并行。即使是采用GPU进行传统的DNN模型进行训练,其训练时间也是非常漫长的,一般训练几千小时的声学模型所需要几个月的时间。而随着互联网服务的深入,海量数据训练越来越重要,DNN这种缓慢的训练速度必然不能满足互联网服务应用的需要。Google搭建的DistBelief,是一个采用普通服务器的深度学习并行计算平台,采用异步算法,由很多计算单元独立地更新同一个参数服务器的模型参数,实现了随机梯度下降算法的并行化,加快了模型训练速度。与Google采用普通服务器不同,百度的多GPU并行计算平台,克服了传统SGD训练的不能并行的技术难题,神经网络的训练已经可以在海量语料上并行展开。可以预期,未来随着海量数据训练的DNN技术的发展,语音图像系统的识别率还会持续提升。

6.2深度学习的局限性

首先,缺乏理论支持。对于深度学习架构,存在一系列的疑问,卷积神经网络为什么是一个好的架构(事实上其存在梯度散射等缺点),深度学习的结构需要多少隐层,在一个大的卷积网络中到底需要多少有效的参数(很多权重相互之间似乎都存在冗余),随机梯度下降方法优化权重得到一个局部最优值。虽然深度学习在很多实际的应用中取得了突出的效果,但这些问题一直困扰着深度学习的研究人员。深度学习方法常常被视为黑盒,大多数的结论确认都由经验而非理论来确定。不管是为了构建更好的深度学习系统,还是为了提供更好的解释,深度学习都还需要更完善的理论支撑。

其次,缺乏推理能力。深度学习技术缺乏表达因果关系的手段,缺乏进行逻辑推理的方法。解决这个问题的一种典型方法是将深度学习与结构化预测相结合。目前几个带有结构化预测模块的增强的深度学习系统已经被提出来用于OCR,身体姿态检测,和语义分割等任务中。总的来说,更多新的思路应该被提出以应用于需要复杂推理的任务中。尽管深度学习和简单推理已经应用于语音和手写字识别很长一段时间了,我们仍需要在大的向量上使用新的范式来代替基于规则的字符表达式操作。最终,那些结合了复杂推理和表示学习的系统将为人工智能带来巨大的进步。

第三,缺乏短时记忆能力。人类的大脑有着惊人的记忆功能,我们不仅能够识别个体案例,更能分析输入信息之间的整体逻辑序列。这些信息序列富含有大量的内容,信息彼此间有着复杂的时间关联性。例如在自然语言理解的许多任务(例如问答系统)中需要一种方法来临时存储分隔的片段,正确解释视频中的事件并能够回答有关它的问题需要记住的视频中发生的事件的抽象表示。包括递归神经网络在内的深度学习系统,都不能很好地存储多个时间序列上的记忆。这使得研究人员提出在神经网络中增加独立的记忆模块,如LSTM,记忆网络(Memory Networks),神经图灵机(Neural Turing Machines),和Stack增强RNNstack-Augmented RNN)。虽然这些方法很有意思,也取得了一定的成果,但在未来仍需要更多的新的思路。

最后,缺乏执行无监督学习的能力。无监督学习在人类和动物的学习中占据主导地位,我们通过观察能够发现世界的内在结构,而不是被告知每一个客观事物的名称。有趣的是,在机器学习领域,神经网络的复兴恰恰是在无监督学习取得不断进度的2000s中期,虽然无监督学习可以帮助特定的深度网络进行预训练,但最终绝大部分能够应用于实践的深度学习方法都是使用纯粹的有监督学习。这并不能代表非监督学习在深度学习中没有作用,反而具有非常大的潜力,因为我们拥有的非标记数据比标记数据多得多,只是我们还没有找到很合适的非监督学习算法,非监督学习在未来存在巨大的研究空间。毫无疑问,今后计算机视觉的进步有赖于在无监督学习上取得突破,尤其是对于视频的理解。

6.3深度学习的未来展望与趋势

   深度学习与大数据的良好配合

移动互联网和多种智能设备的普及使我们进入大数据时代[32],为人工智能的发动机——深度学习提供了足够多的燃料,早期的神经网络只拥有有限的数据处理能力。超过这个临界点时,为它们输入更多信息并不会带来更好的表现。而现在的神经网络系统所依赖的开发者的指导和调整要少得多。同时,不管你能输入多少数据,系统都能够对其进行充分利用。谷歌、Facebook和百度等互联网巨头坐拥海量信息,大量的搜索历史、社交信息和图片等。因此,他们才会积极布局深度学习,让机器不再惧怕信息过载的问题,反而是更好的从这些海量信息中挖掘中更多价值。

从另一方面来说,神经网络要发挥作用必须先接受训练[33]。比如说,一台机器要教会自己识别人脸,必须先被展示一个「训练集」,其中包含成千上万的照片。也就是说,数据量的增长反过来也会提升神经网络的表现。也就是说,对于深度学习和人工智能,需要越来越多的数据。虽然谷歌、Facebook和百度这类科技巨头坐拥海量数据,但依然需要更加开放的互联网中的数据输入。例如,Facebook人工智能实验室负责人Yann LeCun在接受IEEE采访时表示,Facebook的人脸识别算法DeepFace在数据库中的测试结果是97.25%,但如果图片库里有数亿张脸,那精确性就远不及97.25%。所以,这些科技巨头需要将深度学习和人工智能的研究更加开放,因为只有将他们已有的成果从一个相对封闭的环境中换到整个互联网中时,才能使深度学习模型更加完善,使人工智能得到更加广泛的应用。


深度学习对人工智能的默契推动


面对海量数据,深度学习算法可以做到传统人工智能算法无法做到的事情,而且输出结果会随着数据处理量的增大而更加准确。人工智能能给我们带来什么,人工智能的循环发展是非常迅速的,深度学习带来了AI人工智能的良性循环。现在有了更多的用户就可以获得更加大量的数据,更多的数据通过人工智能被更好地利用,来推动更多的优秀产品被生产出来,而这个只是在最近几年我们才做的事情。大家搜集到的数据越来越多,但是引擎不够大,所以不能深度地利用这些数据[34]。在我们搜集更多数据的过程中,推动更多应用发生的过程中,对之前那些老的算法是要有批判精神的。而深度学习之所以能给我们带来更多的价值就是因为我们现在可以从越来越多的数据当中受益,获得越来越好的结果,开发越来越多的潜能。深度学习确实改变着我们的生活,改变着传统的人工智能,使人们最终可以把链接做得特别好,把发动机和燃料的链接做得特别好,把产品、大量用户和海量数据之间的连接做得更加通畅。

深度学习带来了人工智能的正循环[17],那这对于我们来说意味着什么?Andrew Ng曾提出,深度学习算法可以使机器自己学会世界上的一些概念,也就是机器将具备一定的人类般的学习和思考能力。人类自身的学习能力可以帮助我们自行认识世界,而当机器当过模拟人脑具备了这一能力之后,就可以在一定程度上取代我们部分脑力工作。就像在工业革命和电力革命的影响力,我们自身从体力劳动中解放出来一样,在深度学习所带来的人工智能革命下,我们同样可以将脑力工作外包给机器。


NIPS(神经信息处理系统)2015年论坛提出的几大趋势[30]


  (1)神经网络框架变得越来越复杂而精密,在感知、语言翻译等等方面的大部分最先进的神经网络框架正在发展并且不在仅仅关于简单前馈式(feed forward)框架或者卷积式框架(convolutional),特别地,它们正在混合并匹配不同的神经网络技术如LSTMs、卷积、自定义目标函数、多皮层柱(multiple corticalcolumns)等等;(2)所有最酷的系统都在使用LSTMs,大部分最先进的系统都将LSTMs纳入到系统中,以使系统具有捕捉重复模式的记忆力;(3)“注意力模型”在升温,一些系统,但不是全部,开始放到注意力模型的背景中,或者说让神经网络在完成任务的过程中试图学习在哪里放置其注意力,这些还不是一个正规神经网络流水线中的一部分,但是已经时不时的出现在模型中了;(4)神经图灵机仍然有趣,但并没有影响到实际工作,神经网络图灵机(Neural Turing Machines)的研究,或者说能够有差异地训练一个神经网络来学习算法,仍然有趣,但是还没有应用到实际工作中,它们还很复杂并且目前只能解决玩具问题(toy problems);(5)符号微分法越来越重要,随着神经网络框架和它们的目标函数可以自定义,同时也变得越来越复杂,人为手动提取它们反向传播中的梯度变得越来越难,也容易出错。最新的工具包如谷歌的TensorFlow有了自动符号微分,所以你可以构建你的框架和目标函数,在训练过程中工具包会在众多的碎片中自动地找出正确的微分来保证误差梯度可以反向传播;(6)神经网络模型压缩带来了越来越多令人惊喜的结果,多个团队展示了不同的方式来剧烈地压缩一个训练过的模型的权重数量:二值化(binarization)、固定浮点(fixed floating point)、迭代剪枝(iterative pruning)和微调措施(fine tuning steps)等等更多,这些方法为许多应用带来了可能:有可能将很复杂的模型适配到手机上,例如,与云端无延迟的对话来得到结果,如语音识别;(7)深度学习和强化学习的交叉在继续,深度神经网络和强化学习的计划能力两者结合给人带来的令人兴奋的可能。在这个领域一些令人兴奋的工作正在发生,如端对端机器人,使用深度学习和强化学习来完成原始传感器数据到实际动作执行器的直接过度;(8)如果你没使用批量归一化,那么现在应该开始了,批量归一化(batch normalization)正被考虑成为神经网络工具包的一个标准部分;(9)神经网络和产品应用,应该携手同行,让研究人员创造新的神经网络方法,而且也有途径将这些方法快速扩展到实际应用产品中。

6.4本章小结

  本章阐述了深度学习面临的一些问题,指出了深度学习的局限性,又根据现状对未来的发展趋势进行了展望。

 

                             总结

深度学习引爆了一场激烈的科技革命,必将会催生出其他领域的变革和跨越式的发展。首先,深度学习作为核心信息技术,将本质上提升各类信息服务的质量,大幅提升自然语言、图片、声音识别和语言翻译等方面的准确率,可以预见未来的信息服务尤其是互联网信息服务的竞争,将聚焦于深度学习引发的人工智能,能否应用好深度学习将会对信息企业乃至国家的信息安全产生深远影响。另外,由深度学习带来的各项突破,包括计算机视觉发展推动了下一代智能汽车的不断完善,以及应用于蛋白质分析等生物和医药领域并取得重要成果,都预示着深度学习不仅成为新一代信息科学研究的主流方法,更逐渐演变为一项核心通用技术和基础技术,对于物联网、智能设备、自动驾驶汽车、生物制药、金融和经济调控等多领域具有非常直接的现实意义,将有可能引爆新的经济增长点,引导产业和经济社会的发展方向。尤其需要注意的是,美国国防部、欧洲委员会都将深度学习列为前沿和革命技术加以资助,我们完全可以判断深度学习的应用绝不会局限于科技和经济,相信其对社会管理、军事等更多领域都将产生深远影响。

                           部分参考文献及浏览的网页

[1]浅谈深度学习的基本思想与方法

http://wenku.baidu.com/view/9e3e252c964bcf84b9d57bad.html?re=view

[2]深度学习发展现状

http://wenku.baidu.com/link?url=9Dwi8PtqWnUebD4FHGh8igXQobVXm7I-L0Y65H5Xxd-S7yu6HONh4Vp493_TbnSo1OZlTiXEk6dnZTYBzyrpngI7KnZqHzu4w6bYLEH5VGG

[3]深度学习百度百科知识

http://baike.baidu.com/link?url=w2BB6Wy84IlTgs-SPNGW7XkYQK_JPp42SZYOfiu3vmgc9nI2R8wB9qJl4FA-FO3norLKPDRI9RtZkEVDUg_goq

[4]深度学习: 推进人工智能的梦想

http://www.csdn.net/article/2013-05-29/2815479

[5]刘建伟.深度学习研究进展[J].计算机应用研究.20147):第31卷第七期

1921-1927

[6]HINTON G EOSINDEO STEH Y W A fast learning algorithm

for deep belief netsJ]. Neural Computation200618(7):1527-

1554

7 BENGIO YLAMBLINPPOPOVICI Det al Greedy layer-wise

training of deep networksC/ /Advances in Neural Information Pro-

cessing Systems Cambridge:MIT Press2007:153-160

8BOTTOU LLarge-scale machine learning with stochastic gradient de-

scentC/ /Proc of the 19th International Conferece on Computational

StatisticsBerlin:Springer-Verlag2010:177-186

9SAXE A MKOH P WCHENZet al On random weights andun-supervised feature learningC/ /Proc of the 28th International Con-ference on Machine Learning New York: ACM Press2011:1089-1096

10SWESKY KCHEN BoMALIN Bet al A tutorial on stochastic

approximation algorithms fortraining restricted Boltzmann machines

and deep belief netsC/ /Proc of Information Theory and Applica-

tions Workshop 2010: 1-10

11 TAYLO GHINTON G E Factored conditional restrictedBoltzmann

machines for modeling motionstyleC/ /Proc of the 26th Annual In-

ternational Conference onMachine Learning New York:ACM Press

2009:1025-1032

12WONG W KSUN M Deep learning regularized Fisher mappings

J]. IEEE Trans on Neural Networks201122(10):1668-1675

13]RAIKO TVALPOLA HLeCUN Y Deep learning made easier by

linear transformations inperceptronsC/ /Proc of the 15th Interna-

tional Conference onArtificial Intelligence and Statistics 2012:924-

932

14]RANZATO MBOUEAU Y LLeCUN YSparse feature learning

for deep belief networksC/ /Advances in Neural Information Pro-

cessing Systems Cambridge:MIT Press2008:1185-1192

15]RANZATO MPOULTNEYCCHOPA Set al Efficient learning

of sparse representationswith an energy-based modelC/ /Advances

in Neural InformationProcessing Systems Cambridge: MIT Press

2007:1137-1144

 [16]杜红乐.深度学习在实践教学中的应用研究[J].2015.4

.20148):47-48

[17],深度学习带来了人工智能的正循环,那这对于我们来说意味着什么?

http://www.huxiu.com/article/42258/1.html

[18],深度学习30年创新路

http://36kr.com/p/533832.html

[19],探索“深度学习”的奥秘

http://www.qstheory.cn/science/2015-06/24/c_1115706389.htm

[20],深度学习算法简介

http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201782.html

[21],深度学习、自然语言处理和表征方法

http://blog.jobbole.com/77709/

[22],深度学习发展现状

http://wenku.baidu.com/link?url=9Dwi8PtqWnUebD4FHGh8igXQobVXm7I-L0Y65H5Xxd-S7yu6HONh4Vp493_TbnSo1OZlTiXEk6dnZTYBzyrpngI7KnZqHzu4w6bYLEH5VGG

[23],浅谈深度学习(Deep Learning)的基本思想和方法

http://blog.csdn.net/xianlingmao/article/details/8478562

[24],张建明.深度学习的研究与发展[J].2015.02:第36卷第2191-200

[25],深度学习领域三大牛LeCunBengioHinton联合打造史上最权威综述

http://dataunion.org/19192.html

[26],深度学习 vs.大数据:神经网络权值的版权属于谁?

http://www.csdn.net/article/2015-05-19/2824707

[27],谁能(尽量的)用科普语言讲一下 “深度学习(deep learning)”的神经网络

和 以前那种 “多层神经网络” 的区别?

http://tieba.baidu.com/p/3349640872

[28],“深度学习”和“多层神经网络”的区别?

http://www.zhihu.com/question/26017374

[29],王涛.计算机视觉前沿与深度学习[J].2015.4:第11卷第四期

[30],解析深度学习的未来十大趋势

http://cvchina.net/post/156.html

[31]Facebook人工智能负责人Yann LeCun谈深度学习的局限性

http://www.infoq.com/cn/news/2015/07/deep-learning-limit?

utm_source=tuicool

[32],深度学习现状及更加开放的未来

http://zhaoyunfeng.baijia.baidu.com/article/67156

[33],专家展望未来5年深度学习发展趋势

http://www.thebigdata.cn/JieJueFangAn/28843.html

[34],百度吴恩达:深度学习与人工智能

http://tech.sina.com.cn/i/2015-03-22/doc-iavxeafs1999837.shtml

35YU DongDENG Li Deep learning and its applications to signal andinformationprocessingJ]. IEEE SignalProcessing Magazine201128(1):145-154

36 YU DongWANGShi-zhenDENG Li Sequentiallabeling using

deep-structured conditionalrandom fieldsJ]. IEEE Journal of Se-

lected Topics in SignalProcessing20104(6):965-973

37LEE HPHAM PLAGMAN Yet al Unsupervised feature learn-

ing for audio classificationusing convolutional deep belief networks

C/ /Advances in Neural Information Processing Systems Cam-

bridge:MIT Press2009:1096-1104

38 HAMEL PECK D Learning features from music audio with deep

belief networksC/ /Proc of the 11th International Society for Music

Informationetrieval Conference 2010:339-344

39SCHMIDT E MKIM YE Learning emotion-based acoustic features

with deep belief networksC/ /Proc of IEEE Workshop on Applica-

tions of Signal Processingto Audio and Acoustics 2011:65-68

40DENG LiSELTZE MYU Donget al Binary coding of speech

spectrograms using a deepauto-encoderC/ /Proc of the 11th Annual

Conference on InternationalSpeech Communication Association

2010:1692-1695

41BENGIO YBASTIENFBEGEON Aet al Deeplearners be-

nefit more fromout-of-distribution examplesC/ /Proc of the 14th In-

ternational Conference onArtificial Intelligence and Statistics 2011

42LEE HEKANADHAM CNGA Y Sparse deep belief net model

for visual area V2C/ /Advances in Neural Information Processing

Systems Cambridge:MIT Press2008:873-880

43SALAKHUTDINOVR,HINTONG E Semantic hashingJ]. Inter-

national Journal ofApproximateeasoning200950(7):969-978

44HINTON G ESALAKHUTDINOVR. Reducing the dimensionality

of data with neural networksJ]. Science2006313(5786):504-507

45NAI VHINTON G E. Rectified linear units improverestricted Bo-

ltzmann machinesC/ /Proc of the 27 th International Conference on

Machine Learning 2010:807-814

46SUSSKIND JHINTON G EMEMISEVICR,et alModeling thejoint density of two images under a variety of transformationsC/ /Proc of IEEE Conference on ComputerVision and Patternecogni-

tion 2011:2793-2800

47LUO PingWANGXiao-gangTANG Xiao-ouHierarchical face par-

sing via deep learningC/ /Proc of IEEE Conference on Computer

Vision and Patternecognition Washington DC:IEEE Computer So-

ciety2012:2480-2487

48LeCUN YCHOPA S,RANZATO Met al Energy-based models

in document recognition andcomputer visionC/ /Proc of the 9th In-

ternational Conference onDocument Analysis andecognition 2007:

337-341

49 TAYLO GHINTON G E,ROWEIS SModeling human motion

using binary latentvariablesC/ /Advances in Neural Information

Processing Systems Cambridge:MIT Press2007:2007-2014

50 LEE HGOSSER,RANGANATH R,etal Convolutional deep

belief networks for scalableunsupervised learning of hierarchical rep-

resentationsC/ /Proc of the 26th International Conference on Ma-

chine Learning New York:ACM Press2009:609-616

51]RAINAR,BATTLE ALEE Het alSelf-taught learning:transfer

learning from unlabeled dataC/ /Proc of the 24th International Con-

ference on Machine Learning New York:ACM Press2007:759-766

52NAI VHINTON G E 3D object recognition with deepbelief nets

C/ /Proc of the 24th Annual Conference on Neural Information Pro-

cessing Systems 2009:1339-1347

53 TANG Yi-chuanELIASMITHC Deep networks for robust visual

recognitionC/ /Proc of the 27th International Conference on Ma-

chine Learning 2010:1055-1062

54LEE NLAINE A FKLEIN A Towards a deep learning approach to

brain parcellationC/ /Proc of IEEE International Symposium on

Biomedical Imaging:from Nanoto Macro2011:321-324

55SOCHER R,BENGIO YMANNING C D Deep learning for NLP

(without magic)EB/OL]. (2012-07-07) http:/ /nlp stanford

edu/courses/NAACL2013/NAACL2013-Socher-Manning-DeepLearn-

ing pdf

[56]龚著琳,陈瑛,苏懿,.数据挖掘在生物医学数据分析中的应用[J].上海交通大学学报(医学版),2011,11.

 

 

 

 

 

 

 

Radiomics学习总结

阅读数 1091

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