㈠ 大家谁有好一点的电子论文网站,我的毕业设计是基于FPGA的数控振荡器(NCO)的ip core的研究,请大家帮帮忙
1、 基于FPGA的数字通信系统
摘 要本设计实现多路数据时分复用和解复用系统。设计分为发端和收端,以FPGA作为主控核心。发端系统有三路并行数据输入:A/D转换数据,拨码开关1路和拨码开关2路。这三路数据在FPGA的控制下作为串行...
类别:毕业论文 大小:345 KB 日期:2008-05-03
2、 基于FPGA和锁相环4046实现波形发生器
摘 要本设计采用FPGA和锁相环4046实现波形发生器。系统由波形产生模块和可调频率的时钟产生模块,数模转换模块和显示模块四部分组成。波形产生模块完成三种波形的产生,并根据控制信号完成选定波形的输出...
类别:毕业论文 大小:434 KB 日期:2008-05-03
3、 UC/OSII在FPGA上的移植
摘要嵌入式系统是当今非常热门的研究领域,早期多以单片机为核心,应用领域非常广泛.但单片机系统功能比较简单,速度较慢,难以适应现代技术的快速发展.随着现场可编程逻辑阵列(FPGA)技术的日益成熟,基于片...
类别:毕业论文 大小:2.92 MB 日期:2008-05-03
4、 基于FPGA的IIR滤波器设计
摘 要:数字信号处理在科学和工程技术许多领域中得到广泛的应用,与FIR数字滤波器相比,IIR数字滤波器可以用较低的阶数获得较高的选择性,故本课题采用一种基于FPGA的IIR数字滤波器的设计方案,首先...
类别:毕业论文 大小:461 KB 日期:2008-05-02
5、 基于FPGA的TD-SCDMA信道编解码技术研究与实现(硕士)
摘 要作为数字通信系统中一个重要组成部分,信道编码技术为保证通信的可靠性发挥着重要作用,广泛应用于数字通信的抗干扰和差错控制之中。 以TD-SCDMA为例子的第三代移动通信标准来说,其采用了3种信道...
类别:毕业论文 大小:359 KB 日期:2008-04-17
6、 基于ARM和FPGA的数控系统的硬件设计(硕士)
目 录第一章 绪 论 51.1引言 51.2研究背景及国内外发展现状 61.2.1研究背景 61.2.2国外发展状况 71.2.3国内研究现状 71.3本论文课题来源和研究内容 81.3.1课题来...
类别:毕业论文 大小:575 KB 日期:2008-04-15
7、 基于FPGA的JPEG压缩编码的研究与实现(硕士)
摘 要随着信息技术和计算机技术的飞速发展,数字信号处理己经逐渐发展成一门关键的技术科学。图像处理作为一种重要的现代技术,已经在通信、航空航天、遥感遥测、生物医学、军事、信息安全等领域得到广泛的应用。...
类别:毕业论文 大小:2.28 MB 日期:2008-03-23
8、 OFDM通信系统基带数据处理部分的FPGA实现
中文摘要正交频分复用(OFDM,Orthogonal Frequency Division Multiplexing)是当前一种非常热门的通信技术。它即可以被看作是一种调制技术,也可以被看作是一种复用...
类别:毕业论文 大小:1.48 MB 日期:2008-03-08
9、 FPGA应用实验板设计
2007-09-24 19:58 207,360 FPGA体系的低功耗高层次综合.doc2007-09-24 19:17 1,214,976 FPGA应用实验板...
类别:毕业论文 大小:1.21 MB 日期:2007-09-25
10、 UWB-OFDM解调器的仿真及FPGA在线仿真实现
摘 要随着无线通信技术的飞速发展,人们对于数据传输速率和服务质量(QoS)提出了更高的要求,尤其是对于那些针对短距离通信的应用来说更是如此。超宽带无线通信技术(UWB)因为其自身具有的高传输速率、低...
类别:毕业论文 大小:1.71 MB 日期:2007-09-23
11、 高速VITERBI译码器在ALTERA FPGA中的设计与实现
摘 要 本文以CDMA数字移动通信中的差错控制问题为背景,用Altera公司的现场可编程门阵列(FPGA)器件(APEX20K200)设计实现了一种约束长度N=7的维特比(Viterbi)译码的...
类别:毕业论文 大小:534 KB 日期:2007-09-06
12、 基于FPGA温、湿度传感器系统设计
摘要 本系统采用FPGA芯片为主处理核心,从机采用FPGA芯片,负责数据检测,检测点的温度和湿度经过温、湿度传感器转换为数字信号,将数字量送入从机,再经从机的数据处理,定时通过无线方式传送给PC主...
类别:毕业论文 大小:1.1 MB 日期:2007-08-13
13、 基于FPGA的嵌入式系统开发板
摘 要本文设计完成的是基于FPGA的嵌入式系统开发板,它可以完成FPGA、嵌入式系统和SOPC等的设计和开发。开发板以Altera公司的Cyclone系列FPGA—EP1C6为核心,在其外围扩展FL...
类别:毕业论文 大小:1.07 MB 日期:2007-07-21
14、 卫星信道延时模拟器的FPGA实现
摘要:在当前通信领域中卫星通信系统已经成为现代化通信强有力的手段之一。卫星信道组网具有下面一些优点:通信范围大,只要卫星发射的波束覆盖进行的范围均可进行通信;不易受陆地灾害影响;建设速度快;易于实现广...
类别:毕业论文 大小:546 KB 日期:2007-07-02
15、 基于Altera FPGA的发动机ECU原型设计
摘要本文以直列4缸汽油发动机为背景,进行了汽车发动机传感器和控制器信号调理的尝试,采用以自顶向下为核心的现代数字系统设计方法,借助EDA开发平台和EDA实验台,完成基于Altera FPGA的发动机E...
类别:毕业论文 大小:1.24 MB 日期:2007-06-21
16、 基于FPGA设计电梯控制系统
摘 要随着科学技术的发展,近年来,我国的电梯生产技术得到了迅速发展.一些电梯厂也在不断改进设计、修改工艺。而基于现场可编程逻辑门阵列(FPGA)来实现的电梯控制系统由于运行可靠性高,使用维修方便,抗干...
类别:毕业论文 大小:766 KB 日期:2007-06-12
17、 FPGA在机卡分离式高清数字一体电视机里的应用
摘要高清数字电视(HDTV)是继黑白模拟电视,彩色模拟电视之后的第三代电视。随着数字高清电视在全球发展日夜加速,美国、欧洲和日本等国家推进数字电视的速度和力度都在不断加大,我国也在数字电视方面也加快了...
类别:毕业论文 大小:483 KB 日期:2007-03-14
18、 PSK调制算法仿真与FPGA实现
摘要 随着时代的发展,通信工程领域越来越多的应用集成芯片完成系统功能,它有着体积小,功能强大,开发周期短,便于实现等特点被业内工程师广泛认可。其中在集成芯片领域,最有突破性和创新性的就是FPGA(Fi...
类别:毕业设计 大小:1.91 MB 日期:2007-02-01
19、 基于FPGA的数字复接系统帧同步器的设计
目 录摘要Abstract1 绪论………… 11.1数字复接技术的发展………………………………11.2复接技术的研究现状………………………………32 数字通信及复接原理……………………………… 5...
类别:毕业设计 大小:432 KB 日期:2007-01-20
㈡ 可以利用FPGA中的锁相环实现FM解调吗
那个提示根本不是说clk已经使用了,而是说clk的引脚不是时钟引脚。
㈢ 怎样用FPGA实现FSK调制解调
FSK(Frequeney-Shift Keying,频移键控)是用不同频率的载波来传送数字信号。FSK信号具有抗干扰能力强、传输距离远等优点,在只常生活和工业控制中被广泛采用。例如CID(Calling Identity Delivery)来电显示,低速的Modem,铁路系统和电力系统的载波通信中也广泛使用他来传送各种控制信息。以往的FSK调制解调器采用“集成电路+连线”方式设计,集成块多、连线复杂且体积较大。本文基于FPGA芯片,采用VHDL语言,利用层次化、模块化设计方法,提出了一种FSK调制解调器的实现方法。
1 系统整体结构框图
本文设计的FSK调制解调器采用了ALTERA公司的EP1C3T144C8芯片,系统主时钟频率为20 MHz(芯片外部有源晶振),“0”,“1”数字信号由伪随机信号(m序列)发生器产生。为完成FSK调制器和解调器的发送与接收,由FPGA芯片完成的系统整体逻辑功能框图如图1所示。
2 系统的具体设计与实现
2.1 伪随机序列的产生
最大长度线性移位寄存器序列(m序列)是数字通信中非常重要的、应用十分广泛的一种伪随机序列。由于他具有随机性、规律性及较好的自相关性和互相关性,而且要求设备简单,易于实现,成本低的特点,本系统采用m序列作为数字基带信号进行程序调试。
m序列是由带线性反馈的移位寄存器产生的周期最长的一种二进制序列。线性反馈移位寄存器的一般结构如图2所示。他是由n级移位寄存器,若干模二加法器组成线性反馈逻辑网络和时钟脉冲产生器连接而成。
由于带有反馈,因此在移位脉冲作用下,移位寄存器各级的状态将不断变化,通常将移位寄存器的最后一级作为输出,由此所产生的输出序列为:{ak}=a0a1…ak-1。
输出序列是一个周期序列,其特性由移位寄存器的级数、初始状态、反馈逻辑及时钟频率(决定着输出码元的宽度)所决定。
当移位奇存器的级数及时钟一定时,输出序列就由移位寄存器的初始状态及反馈逻辑完全确定;当初始状态为全零状态时,移位寄存器输出全0列。因此初始状态不能为全零状态。
本系统选用m序列的级数为n=7,序列长度为m=27-1=127,若选用的反馈系数的八进制数值为235,转换成二进制数值为10011101,即c0=c2=c3=c4=c7=1,c1=c5=c6=0。仿真波形如图3所示。
2.2 FSK调制
本系统是利用2个独立的分频器来改变输出载波频率,以数字键控法来实现FSK捌制。
数字键控法也称为频率选择法,他有2个独立的振荡器,数字基带信号控制转换开关,选择不同频率的高频振荡信号实现FSK调制。键控法产生的FSK信号频率稳定度可以做到很高并且没有过渡频率,他的转换速度快,波形好,频率键控法在转换开天发生转换的瞬刚,2个高频振荡的输出电压通常不相等,于是已调信号在基带信息变换时电压会发生跳变,这种现象称为相位不连续,这是频率键控特有的情况。
本文设计的FSK调制系统方框图如图4所示。
2.3 FSK解调
过零检测法与其他解调方法相比较,最明显的特点就是结构简单,易于实现,对增益起伏不敏感,特别适用于数字化实现。他是一种经济、实用的最佳数字解调方法。其方框图如图5所示。他利用信号波形在单位时间内与零电平轴交义的次数来测定信号频率。输入的已调信号经限幅放大后成为矩形脉冲波,再经微分电路得到l圾向尖脉冲,然后整流得到单向尖脉冲,每个尖脉冲表示信号的一个过零点,尖脉冲的重复频率就是信号频率的2倍。将尖脉冲去触发一单稳态电路,产生一定宽度的矩形脉冲序列,该序列的平均分量与脉冲重复频率成正比,即与输入频率信号成正比。所以经过低通滤波器输出平均量的变化反映了输入信号的变化,这样就完成了频率-幅度变换,把码元“1”与“0”在幅度上区分开来,恢复出数字基带信号。
本文设计的FSK解调方框图如图6所示。
3 系统仿真与实验结果分析
整个设计使用VHDL编写,以EP1C3T144CS为下载的目标芯片,在Quartus II软件平台上进行布局布线后进行波形仿真,可得到如图7所示的波形图。其中:clk为输入主时钟信号;en为置位信号;clks为clk经过200分频器的输出信号;ps7为时钟源经过n=7的伪随机发生器产生的伪随机(m序列)信号;fsk为ps7经过FSK调制器后的已调信号;q为fsk经过FSK解调器后的解调信号。
在实际硬件电路上进行测试,用示波器观察各个模块的工作过程,得到如图8和图9所示的波形图。
其中,圈8中Ch1为已调信号,Ch2为数字基带信号。图9中Ch1为数字基带信号,Ch2为解调信号。
由上面的软件和硬件的测试结果可知:
(1)本系统的FSK调制解调器功能已经实观,结果正确无误,经验证满足预期的设计指标要求,且其整个工作过程可通过软件波形仿真,或是实际硬件电路通过示波器来直观、清晰观察。
(2)传统的调制解调方式可以采用软件与硬件结合的方式来实现,符合未来通信技术发展的方向。
4 结 语
传统的FSK调制解调方式都是采用硬件电路实现,电路复杂、调试不便。文中采用硬件描述语占设计的基于FPGA调制解调器,设计灵活、修改方便,有效地缩小了系统的体积,增加了可靠性,同时系统采用VHDL语言进行设计,具有良好的可移植性及产品升级的系统性。
㈣ 以后想找fpga的相关工作,面试应该准备什么,请问有这方面的参考书籍吗
面试流程一般分以下几个阶段:仅供参考
一、面试前的准备:
面试前要先预想主考官会问的问题,并准备谨慎而有条理地回答。事先有准备的人,表情和肢体语言比较笃定从容,且具备较好的回应能力。大学毕业生由于缺乏面试经验,可事先找朋友练习面试技巧。面试时最好提前10分钟到达地点,先去洗手间放松一下,整理一下思路,还可最后检查一下自己的仪容,整理因挤公车而弄乱的发型,女士还可趁机补补妆。
二、面试时的礼仪:
面试务必要准时,一进公司就是面试的开始,对人要客气有礼,秘书或接待人员都可能影响到你是否能得到这份工作。面试前应关掉手机,若当着主考官的面关掉,更可显出你的诚恳。注意自己坐姿,节制不该有的小动作。与主考官保持视线的接触,但不要紧盯着对方的眼睛,眼神切勿乱瞟乱看。
三、面试时的应对:
仔细聆听对方的问题,审慎回答,不要太简略,切忌只回答"是的"、"好"、"对的"、"没问题"等无法使内容更生动的字句,要完整并举实例说明,但要避免冗长。
若对应征公司不了解,不妨坦诚相告,以免说错而得不偿失。
当对方问你"你能为公司做什么时",若无法马上回答,可先请问对方这份工作上最重要的内容是什么,你好就这些部分来回答。
当方问及你的专长时,别忘了针对专业特性来回答。对自己的能力和专长不需刻意强调,但也不必大过谦让。
主考提及你是否有问题时,一定要把握机会发问,以表现自己对这份工作的强烈兴趣,但要就工作内容、人事规章等范围发问,不要离题太远
四、面试结束后:
无论告辞时说些什么,要表现出信心坚定,给主试者一个深刻的印象。离开前应谢谢主试者给你面谈的机会。若面试时间较长,在面试结束时,可以赞扬主试者在面试过程中使你获益的特殊观点,还可寄封一封感谢信,以加深对你的印象。
㈤ 有什么适合大学本科生做的FPGA项目啊
直流电机伺服控制系统
1、 任务
使用FPGA为核心器件设计并制作一个直流电机伺服控制系统。
2、 要求
1. 基本要求:
(1)实现PWM逻辑和桥式驱动电路以驱动小型直流电机(5W以下),可开环控制其转速变化;
(2)实现测速电路和逻辑,可采用光电方式,能够测量并显示电机的实时转速;
(3)实现PID反馈控制算法连接测速逻辑和PWM驱动逻辑,实现对电机空载转速的直接精确控制,转速控制范围600rpm~2400rpm,控制误差小于5%,转速跟踪时间小于5s。
2. 发挥部分
(1)降低转速跟踪时间至2s以下;
(2)降低控制误差小于2%;
(3)允许轻载(小于电机堵转扭矩的20%)。
4、 说明
1. 此题侧重电赛控制和电力电子方向,建议参加电赛控制或电力方向的队伍或与参加电赛控制或电力方向的同学组队选做此题
2. PWM逻辑和测速逻辑建议使用Verilog编写,PID算法可用Verilog实现也可在Nios2内软件实现;
3. 桥式驱动电路可采用单芯片方案,参考ST公司L62XX系列。
音乐播放器
一、任务
使用FPGA为核心器件设计并制作一个音乐播放器,能够播放存储在SD卡中的音乐文件。
二、要求
1. 基本要求:
(1)设计音频DAC电路和音频放大电路,可采用单芯片方案;
(2)能够播放44.1KHz采样率16位的音频文件,音质良好。
(3)能够播放多个音频文件,并可切换曲目;
(4)实现快进、快退功能;
2. 发挥部分
(1)能够播放压缩格式的音频文件,如ADPCM格式甚至MP3格式;
(2)实现同步显示歌词的功能。
(3)五段式频谱显示。
软件无线电数据收发系统
1、 任务
使用FPGA为核心器件,实现一套软件无线电数据收发系统。
2、 要求
1. 基本要求
1) 数据发送端采用DDS为信号源,做FSK、ASK或PSK调制(任选一种),并使用DAC输出信号至天线,基带数据采用曼彻斯特编码;
2) 数据接收端采用ADC做直接载频采样或直接中频采样(IF Sampling),在FPGA内做解调(解调方式不限),基带解码并得到数据;
3) 载频自定,占用带宽尽量小,可使用理想信道(直接导线连接)传输载波,并使得数据传输率大于1Kbit/s;
4) 发送端通过8个拨动开关定义发送序列,在接收端以LED显示其状态;
2. 扩展要求
1) 采用无线信道,天线形式任意,传输距离大于0.5m;
2) 提高数据传输率至50Kbit/s。
4、 说明
1. 此题侧重电赛高频方向,建议参加电赛高频方向的队伍或与参加电赛高频方向的同学组队选做此题
2. 测试时,将主要采用SignalTap观察编码、调制的情况。
3. 需要了解和学习的知识:
a) 关于数字信号采样的奈奎斯特定律
b) 关于通信的调制、解调、基带编码、符号同步、帧同步等
c) 关于软件无线电的载频采样、中频采样、相干解调等
请参考相关书籍。
4. 可采用一片DE0开发板同时做收发
5. 此题方案可深可浅,由于信道理想,请大家不要拘泥于通信原理或软件无线电相关书籍上讲述的经典、繁复的方案,应根据具体情况尽量简化解调、解码方法
简易数字存储示波器
一、任务
使用FPGA为核心器件设计并制作一台用于显示被测波形的简易数字存储示波器.
二、要求
1、基本要求
1) 要求仪器具有触发存储显示功能,仪器在满足触发条件时,能对被测信号采集与存储,然后使用LCD显示,或者通过串口或JTAG口发送数据至PC端显示;
2) 要求仪器的输入阻抗大于1MΩ;
3) 显示纵向(电压)分为10格(div),每格10个采样点,纵向分辨率三档可调:±0.1V/div、±0.2V/div、±0.5V/div。
4) 显示横向(时间)分为10格(div),每格10个采样点,横向分辨率六档可调:1μs/div、2.5μs/div、5μs/div、10μs/div、25μs/div、50μs/div;
5) 最大输入信号带宽达到1MHz;
6) 包含上升沿触发和下降沿触发两种触发方式,触发电平可调;
7) 存储深度:每次触发存储一屏(100样点);
8) 实现连续采样,每秒两次触发采样,即屏幕刷新率2屏/s,没有触发条件时,间隔0.5秒采一屏;
9) 观测波形无明显失真。
2、发挥部分
1) 增加单次采样和暂停功能;
2) 提高屏幕刷新率至5屏/s;
3) 扩展存储深度,在单次采样结束和暂停时,具有波形缩放和水平移动功能;
4) 显示信号峰峰值、有效值、平均值和频率;
5) 增加光标功能,两个光标,可移动并动态显示两个光标处的时间、电压和光标间的时间差;
6) 提高采样率、提高横向分辨率并提高输入带宽。
四、说明
这个题目对器件要求比较高,偏重电赛测量方向,建议参加电赛测量方向的队伍或与参加电赛测量方向的同学组队选做此题,题目中需要采样率10Msps的AD转换器,请大家查找ADI或TI公司的相关芯片自行申请。
㈥ 为什么基于FPGA的fsk解调仿真波形y出不来
FSK(Frequeney-Shift Keying,频移键控)是用不同频率的载波来传送数字信号。FSK信号具有抗干扰能力强、传输距离远等优点,在只常生活和工业控制中被广泛采用。例如CID(Calling Identity Delivery)来电显示,低速的Modem,铁路系统和电力系统的载波通信中也广泛使用他来传送各种控制信息。以往的FSK调制解调器采用“集成电路+连线”方式设计,集成块多、连线复杂且体积较大。本文基于FPGA芯片,采用VHDL语言,利用层次化、模块化设计方法,提出了一种FSK调制解调器的实现方法。
1 系统整体结构框图
本文设计的FSK调制解调器采用了ALTERA公司的EP1C3T144C8芯片,系统主时钟频率为20 MHz(芯片外部有源晶振),“0”,“1”数字信号由伪随机信号(m序列)发生器产生。为完成FSK调制器和解调器的发送与接收,由FPGA芯片完成的系统整体逻辑功能框图如图1所示。
2 系统的具体设计与实现
2.1 伪随机序列的产生
最大长度线性移位寄存器序列(m序列)是数字通信中非常重要的、应用十分广泛的一种伪随机序列。由于他具有随机性、规律性及较好的自相关性和互相关性,而且要求设备简单,易于实现,成本低的特点,本系统采用m序列作为数字基带信号进行程序调试。
m序列是由带线性反馈的移位寄存器产生的周期最长的一种二进制序列。线性反馈移位寄存器的一般结构如图2所示。他是由n级移位寄存器,若干模二加法器组成线性反馈逻辑网络和时钟脉冲产生器连接而成。
㈦ 我想用FPGA数码管显示DS18B20测量的信息。引脚怎么连接啊
可以的。
上面是我做的FPGA读取DS18B20的实例。
DS18B20用FPGA控制有点麻烦,因为FPGA的时序处理复杂。所以你要严格遵守DS18B20的时序图,按上面标明的时序进行处理。
祝你成功!
㈧ fpga如何实现单片机控制功能
你可以试着用FPGA里面的软核去实现MCU的功能(比如Nois软核),像你如果要测量距离,一般是需要A/D转换功能的,一般FPGA不带这个功能的,所以你要外加A/D芯片,转成数字量以后交给FPGA处理。
如果用纯硬件电路做,则需要一系列的组合电路和时序电路知识,比如你可以配置成编码器,解码器,触发器。就当成是数字电路设计用FPGA去实现而已。具体设计要看具体东西的。
㈨ 将32路数据采集回来,由ADG706接到FPGA上,再用RS232接到上位机上。RS232接口协议那部分怎么编
你想怎么遍就怎么编,不过你确定232接口行?数据量大了232很不稳定的,一定要校验,最好用485
波特率越高,传送数据越快,当然也就越不稳定,你的数据量看来是不小了,波特率得设高一些,波特率只要两边一致就可以了,数据包你自己定义吧,随便你定义,反正是你自己用,无所谓了
如果距离长也会增加不稳定因素的,波特率如果很高了,对线的质量与232接口卡的要求也高,记得买质量好的
唉,你就是没有一点的经验了,你随便找个产品的说明书,看看别人的通讯协议,你一下就明白了,也省得我在这里与你说那么麻烦
㈩ 如何用FPGA加速卷积神经网络
深度学习本身是一个非常庞大的知识体系。本文更多想从程序员的视角出发,让大家观察一下深度学习对程序员意味着什么,以及我们如何利用这样一个高速发展的学科,来帮助程序员提升软件开发的能力。
本文根据费良宏在2016QCon全球软件开发大会(上海)上的演讲整理而成。
前言
1973年,美国上映了一部热门的科幻电影《WestWorld》,三年之后又有一个续集叫做《FutureWorld》。这部电影在80年代初被引进到中国叫《未来世界》。那部电影对我来讲简直可以说得上是震撼。影片中出现了很多机器人,表情丰富的面部下面都是集成电路板。这让那时候的我觉得未来世界都是那么遥远、那么神秘。
时间到了2016年,很多朋友可能都在追看HBO斥巨资拍摄的同一题材的系列剧《WestWorld》。如果前两部电影还是局限在机器人、人工智能这样的话题,2016年的新剧则在剧情和人工智能的思考方面有了很大的突破。不再渲染机器人是否会威胁到人类,而是在探讨“Dreamsaremainlymemories”这一类更具哲理的问题。
“记忆究竟如何影响了智能”这个话题非常值得我们去思考,也给我们一个很好的启示——今天,人工智能领域究竟有了怎样的发展和进步。
今天我们探讨的话题不仅仅是简单的人工智能。如果大家对深度学习感兴趣,我相信各位一定会在搜索引擎上搜索过类似相关的关键字。我在Google上以deeplearning作为关键字得到了2,630万个搜索的结果。这个数字比一周之前足足多出了300多万的结果。这个数字足以看得出来深度学习相关的内容发展的速度,人们对深度学习的关注也越来越高。
从另外的一个角度,我想让大家看看深度学习在市场上究竟有多么热门。从2011年到现在一共有140多家专注人工智能、深度学习相关的创业公司被收购。仅仅在2016年这种并购就发生了40多起。
其中最疯狂的是就是Google,已经收购了 11 家人工智能创业公司,其中最有名的就是击败了李世石九段的 DeepMind。排名之后的就要数 Apple、Intel以及Twitter。以Intel 公司为例,仅在今年就已经收购了 3 家创业公司,Itseez、Nervana 和 Movidius。这一系列大手笔的并购为了布局人工智能以及深度学习的领域。
当我们去搜索深度学习话题的时候,经常会看到这样的一些晦涩难懂的术语:Gradient descent(梯度下降算法)、Backpropagation(反向传播算法)、Convolutional Neural Network(卷积神经网络)、受限玻耳兹曼机(Restricted Boltzmann Machine)等。
如打开任何一篇技术文章,你看到的通篇都是各种数学公式。大家看到如下左边的图,其实并不是一篇高水准的学术论文,而仅仅是维基网络关于玻耳兹曼机的介绍。维基网络是科普层面的内容,内容复杂程度就超过了大多数数学知识的能力。
在这样的背景之下,我今天的的话题可以归纳成三点:第一,我们为什么要学习深度学习;第二,深度学习最核心的关键概念就是神经网络,那么究竟什么是神经网络;第三,作为程序员,当我们想要成为深度学习开发者的时候,我们需要具备怎样的工具箱,以及从哪里着手进行开发。
为什么要学习深度学习
首先,我们谈谈为什么要学习深度学习。在这个市场当中,最不缺乏的就是各种概念以及各种时髦新技术的词汇。深度学习有什么不一样的地方?我非常喜欢AndrewNg(吴恩达)曾经用过的一个比喻。
他把深度学习比喻成一个火箭。这个火箭有一个最重要的部分,就是它的引擎,目前来看在这个领域里面,引擎的核心就是神经网络。大家都知道,火箭除了引擎之外还需要有燃料,那么大数据其实就构成了整个火箭另外的重要组成部分——燃料。以往我们谈到大数据的时候,更多是强调存储和管理数据的能力,但是这些方法和工具更多是对于以往历史数据的统计、汇总。
而对于今后未知的东西,这些传统的方法并不能够帮助我们可以从大数据中得出预测的结论。如果考虑到神经网络和大数据结合,我们才可能看清楚大数据真正的价值和意义。AndrewNg就曾经说过“我们相信(神经网络代表的深度学习)是让我们获得最接近于人工智能的捷径”。这就是我们要学习深度学习的一个最重要的原因。
其次,随着我们进行数据处理以及运算能力的不断提升,深度学习所代表的人工智能技术和传统意义上人工智能技术比较起来,在性能上有了突飞猛进的发展。这主要得益于在过去几十间计算机和相关产业不断发展带来的成果。在人工智能的领域,性能是我们选择深度学习另一个重要的原因。
这是一段Nvidia在今年公布的关于深度学习在无人驾驶领域应用的视频。我们可以看到,将深度学习应用在自动驾驶方面,仅仅经历了3千英里的训练,就可以达到什么样的程度。在今年年初进行的实验上,这个系统还不具备真正智能能力,经常会出现各种各样的让人提心吊胆的状况,甚至在某些情况下还需要人工干预。
但经过了3千英里的训练之后,我们看到在山路、公路、泥地等各种复杂的路况下面,无人驾驶已经有了一个非常惊人的表现。请大家注意,这个深度学习的模型只经过了短短几个月、3千英里的训练。
如果我们不断完善这种模型的话,这种处理能力将会变得何等的强大。这个场景里面最重要的技术无疑就是深度学习。我们可以得出一个结论:深度学习可以为我们提供强大的能力,如果程序员拥有了这个技术的话,无异于会让每个程序员如虎添翼。
神经网络快速入门
如果我们对于学习深度学习没有任何疑虑的话,接下来就一定会关心我需要掌握什么样的知识才能让我进入到这个领域。这里面最重要的关键技术就是“神经网络”。说起“神经网络”,容易混淆是这样两个完全不同的概念。
一个是生物学神经网络,第二个才是我们今天要谈起的人工智能神经网络。可能在座的各位有朋友在从事人工智能方面的工作。当你向他请教神经网络的时候,他会抛出许多陌生的概念和术语让你听起来云里雾里,而你只能望而却步了。
对于人工智能神经网络这个概念,大多数的程序员都会觉得距离自己有很大的距离。因为很难有人愿意花时间跟你分享神经网络的本质究竟是什么。而你从书本上读的到的理论和概念,也很让你找到一个清晰、简单的结论。
今天就我们来看一看,从程序员角度出发神经网络究竟是什么。我第一次知道神经网络这个概念是通过一部电影——1991年上映的《终结者2》。男主角施瓦辛格有一句台词:
“MyCPUisaneural-netprocessor;alearningcomputer.”(我的处理器是一个神经处理单元,它是一台可以学习的计算机)。从历史来看人类对自身智力的探索,远远早于对于神经网络的研究。
1852年,意大利学者因为一个偶然的失误,将人类的头颅掉到硝酸盐溶液中,从而获得第一次通过肉眼关注神经网络的机会。这个意外加速了对人类智力奥秘的探索,开启了人工智能、神经元这样概念的发展。
生物神经网络这个概念的发展,和今天我们谈的神经网络有什么关系吗?我们今天谈到的神经网络,除了在部分名词上借鉴了生物学神经网络之外,跟生物学神经网络已经没有任何关系,它已经完全是数学和计算机领域的概念,这也是人工智能发展成熟的标志。这点大家要区分开,不要把生物神经网络跟我们今天谈到的人工智能有任何的混淆。
90年代中期,由Vapnik等人提出了支持向量机算法(Support Vector Machines,支持向量机)。很快这个算法就在很多方面体现出了对比神经网络的巨大优势,例如:无需调参、高效率、全局最优解等。基于这些理由,SVM算法迅速打败了神经网络算法成为那个时期的主流。而神经网络的研究则再次陷入了冰河期。
在被人摒弃的十年里面,有几个学者仍然在坚持研究。其中很重要的一个人就是加拿大多伦多大学的Geoffery Hinton教授。2006年,他的在著名的《Science》杂志上发表了论文,首次提出了“深度信念网络”的概念。
与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。在他的论文里面,他给多层神经网络相关的学习方法赋予了一个新名词— “深度学习”。
很快,深度学习在语音识别领域崭露头角。接着在2012年,深度学习技术又在图像识别领域大展拳脚。Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千个类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了将近11个百分点。
这个结果充分证明了多层神经网络识别效果的优越性。从那时起,深度学习就开启了新的一段黄金时期。我们看到今天深度学习和神经网络的火热发展,就是从那个时候开始引爆的。
利用神经网络构建分类器,这个神经网络的结构是怎样的?
其实这个结构非常简单,我们看到这个图就是简单神经网络的示意图。神经网络本质上就是一种“有向图”。图上的每个节点借用了生物学的术语就有了一个新的名词 – “神经元”。连接神经元的具有指向性的连线(有向弧)则被看作是“神经”。这这个图上神经元并不是最重要的,最重要的是连接神经元的神经。每个神经部分有指向性,每一个神经元会指向下一层的节点。
节点是分层的,每个节点指向上一层节点。同层节点没有连接,并且不能越过上一层节点。每个弧上有一个值,我们通常称之为”权重“。通过权重就可以有一个公式计算出它们所指的节点的值。这个权重值是多少?我们是通过训练得出结果。它们的初始赋值往往通过随机数开始,然后训练得到的最逼近真实值的结果作为模型,并可以被反复使用。这个结果就是我们说的训练过的分类器。
节点分成输入节点和输出节点,中间称为隐层。简单来说,我们有数据输入项,中间不同的多个层次的神经网络层次,就是我们说的隐层。之所以在这样称呼,因为对我们来讲这些层次是不可见的。输出结果也被称作输出节点,输出节点是有限的数量,输入节点也是有限数量,隐层是我们可以设计的模型部分,这就是最简单的神经网络概念。
如果简单做一个简单的类比,我想用四层神经网络做一个解释。左边是输入节点,我们看到有若干输入项,这可能代表不同苹果的RGB值、味道或者其它输入进来的数据项。中间隐层就是我们设计出来的神经网络,这个网络现在有不同的层次,层次之间权重是我们不断训练获得一个结果。
最后输出的结果,保存在输出节点里面,每一次像一个流向一样,神经是有一个指向的,通过不同层进行不同的计算。在隐层当中,每一个节点输入的结果计算之后作为下一层的输入项,最终结果会保存在输出节点上,输出值最接近我们的分类,得到某一个值,就被分成某一类。这就是使用神经网络的简单概述。
除了从左到右的形式表达的结构图,还有一种常见的表达形式是从下到上来表示一个神经网络。这时候,输入层在图的最下方,输出层则在图的最上方。从左到右的表达形式以AndrewNg和LeCun的文献使用较多。而在Caffe框架里则使用的则是从下到上的表达。
简单来说,神经网络并不神秘,它就是有像图,利用图的处理能力帮助我们对特征的提取和学习的过程。2006年Hinton的那篇著名的论文中,将深度学习总结成三个最重要的要素:计算、数据、模型。有了这三点,就可以实现一个深度学习的系统。
程序员需要的工具箱
对于程序员来说,掌握理论知识是为了更好的编程实践。那就让我们看看,对于程序员来说,着手深度学习的实践需要准备什么样的工具。
硬件
从硬件来讲,我们可能需要的计算能力,首先想到的就是CPU。除了通常的CPU架构以外,还出现了附加有乘法器的CPU,用以提升计算能力。此外在不同领域会有DSP的应用场景,比如手写体识别、语音识别、等使用的专用的信号处理器。还有一类就是GPU,这是一个目前深度学习应用比较热门的领域。最后一类就是FPGA(可编程逻辑门阵列)。
这四种方法各有其优缺点,每种产品会有很大的差异。相比较而言CPU虽然运算能力弱一些,但是擅长管理和调度,比如读取数据,管理文件,人机交互等,工具也丰富。DSP相比而言管理能力较弱,但是强化了特定的运算能力。
这两者都是靠高主频来解决运算量的问题,适合有大量递归操作以及不便拆分的算法。GPU的管理能力更弱一些,但是运算能力更强。但由于计算单元数量多,更适合整块数据进行流处理的算法。
FPGA在管理与运算处理方面都很强,但是开发周期长,复杂算法开发难度较大。就实时性来说,FPGA是最高的。单从目前的发展来看,对于普通程序员来说,现实中普遍采用的计算资源就还是是CPU以及GPU的模式,其中GPU是最热门的领域。
这是我前天为这次分享而准备的一个AWS 上p2的实例。仅仅通过几条命令就完成了实例的更新、驱动的安装和环境的设置,总共的资源创建、设置时间大概在10分钟以内。而之前,我安装调试前面提到的那台计算机,足足花了我两天时间。
另外,从成本上还可以做一个对比。p2.8xLarge 实例每小时的费用是7.2美元。而我自己那台计算机总共的花费了是¥16,904元。这个成本足够让我使用350多个小时的p2.8xLarge。在一年里使用AWS深度学习站就可以抵消掉我所有的付出。随着技术的不断的升级换代,我可以不断的升级我的实例,从而可以用有限的成本获得更大、更多的处理资源。这其实也是云计算的价值所在。
云计算和深度学习究竟有什么关系?今年的8月8号,在IDG网站上发表了一篇文章谈到了这个话题。文章中做了这样一个预言:如果深度学习的并行能力不断提高,云计算所提供的处理能力也不断发展,两者结合可能会产生新一代的深度学习,将带来更大影响和冲击。这是需要大家考虑和重视的一个方向!
软件
深度学习除了硬件的基础环境之外。程序员会更关心与开发相关的软件资源。这里我罗列了一些曾经使用过的软件框架和工具。
Scikit-learn是最为流行的一个Python机器学习库。它具有如下吸引人的特点:简单、高效且异常丰富的数据挖掘/数据分析算法实现; 基于NumPy、SciPy以及matplotlib,从数据探索性分析,数据可视化到算法实现,整个过程一体化实现;开源,有非常丰富的学习文档。
Caffe专注在卷及神经网络以及图像处理。不过Caffe已经很久没有更新过了。这个框架的一个主要的开发者贾扬清也在今年跳槽去了Google。也许曾经的霸主地位要让位给他人了。
Theano 是一个非常灵活的Python 机器学习的库。在研究领域非常流行,使用上非常方便易于定义复杂的模型。Tensorflow 的API 非常类似于Theano。我在今年北京的QCon 大会上也分享过关于Theano 的话题。
Jupyter notebook 是一个很强大的基于ipython的python代码编辑器,部署在网页上,可以非常方便的进行交互式的处理,很适合进行算法研究合数据处理。
Torch 是一个非常出色的机器学习的库。它是由一个比较小众的lua语言实现的。但是因为LuaJIT 的使用,程序的效率非常出色。Facebook在人工智能领域主打Torch,甚至现在推出了自己的升级版框架Torchnet。
深度学习的框架非常之多,是不是有一种乱花渐欲迷人眼的感觉?我今天向各位程序员重点介绍的是将是TensorFlow。这是2015年谷歌推出的开源的面向机器学习的开发框架,这也是Google第二代的深度学习的框架。很多公司都使用了TensorFlow开发了很多有意思的应用,效果很好。
用TensorFlow可以做什么?答案是它可以应用于回归模型、神经网络以深度学习这几个领域。在深度学习方面它集成了分布式表示、卷积神经网络(CNN)、递归神经网络(RNN) 以及长短期记忆人工神经网络(Long-Short Term Memory, LSTM)。
关于Tensorflow 首先要理解的概念就是Tensor。在辞典中对于这个词的定义是张量,是一个可用来表示在一些向量、标量和其他张量之间的线性关系的多线性函数。实际上这个表述很难理解,用我自己的语言解释Tensor 就是“N维数组”而已。
使用 TensorFlow, 作为程序员必须明白 TensorFlow这样几个基础概念:它使用图 (Graph) 来表示计算任务;在被称之为 会话 (Session) 的上下文 (context) 中执行图;使用 Tensor 表示数据;通过 变量 (Variable) 维护状态;使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据。
一句话总结就是,TensorFlow 就是有状态图的数据流图计算环境,每个节点就是在做数据操作,然后提供依赖性和指向性,提供完整数据流。
TensorFlow安装非常简单,但官网提供下载的安装包所支持的CUDA 的版本是7.5。考虑到CUDA 8 的让人心动的新特以及不久就要正式发布的现状。或许你想会考虑立即体验CUDA 8,那么就只能通过编译Tensorflow源代码而获得。目前TensorFlow已经支持了Python2.7、3.3+。
此外,对于使用Python 语言的程序员还需要安装所需要的一些库,例如:numpy、protobuf等等。对于卷积处理而言,cuDNN是公认的性能最好的开发库,请一定要安装上。常规的Tensorsorflow的安装很简单,一条命令足矣:
$ pip3 install —upgrade
如果想评估一下或者简单学习一下,还可以通过Docker进行安装,安装的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多优点。首先,目前为止,深度学习的开发框架里面TensorFlow的文档做的最好,对程序员学习而言是非常好的一点。第二,TensorFlow有丰富的参考实例,作为参考学习起来非常容易。
第三,开发者社区活跃,在任何一个深度学习的社区里,都有大量关于TensorFlow的讨论。第四,谷歌的支持力度非常大,从2015年到现在升级速度非常快,这是其他开源框架远远达不到的结果。
参考TensorFlow的白皮书,我们会看到未来TensorFlow还将会有巨大的发展潜力。让我特别感兴趣是这两个方向。第一,支持跨多台机器的 parallelisation。尽管在0.8版本中推出了并行化的能力,但是目前还不完善。随着未来不断发展,依托云计算的处理能力的提升这个特性将是非常让人振奋的。
第二,支持更多的开发语言,对于开发者来说这是一个绝大的利好,通过使用自己擅长的语言使用TensorFlow应用。这些开发语言将会扩展到Java、Lua以及R 等。
在这里我想给大家展示一个应用Tensorflow 的例子。这个例子的代码托管在这个网址上 。白俄罗斯的现代印象派艺术家Leonid Afremov善于用浓墨重彩来表现都市和风景题材,尤其是其雨景系列作品。他习惯用大色块的铺陈来营造光影效果,对反光物体和环境色的把握非常精准。
于是我就找到了一张上海东方明珠电视塔的一张摄影作品,我希望通过Tensorflow 去学习一下Leonid Afremov 的绘画风格,并将这张东方明珠的照片处理成那种光影色彩丰富的作品风格。利用Tensorflow 以及上面提到的那个项目的代码,在一个AWS 的p2类型的实例上进行了一个一千次的迭代,于是就得到了下图这样的处理结果。
这个处理的代码只有350行里,模型使用了一个成名于2014年ImageNet比赛中的明星 VGG。这个模型非常好,特点就是“go depper”。
TensorFlow 做出这样的作品,并不仅仅作为娱乐供大家一笑,还可以做更多有意思的事情。将刚才的处理能力推广到视频当中,就可以看到下图这样的效果,用梵高著名的作品”星月夜“的风格就加工成了这样新的视频风格。
可以想象一下,如果这种处理能力在更多领域得以应用,它会产生什么样的神奇结果?前景是美好的,让我们有无限遐想。事实上我们目前所从事的很多领域的应用开发都可以通过使用神经网络和深度学习来加以改变。对于深度学习而言,掌握它并不是难事。每一个程序员都可以很容易的掌握这种技术,利用所具备的资源,让我们很快成为深度学习的程序开发人员。
结束语
未来究竟是什么样,我们没有办法预言。有位作家Ray Kurzweil在2005年写了《奇点临近》一书。在这本书里面他明确告诉我们,那个时代很快到来。作为那个时代曙光前的人群,我们是不是有能力加速这个过程,利用我们学习的能力实现这个梦想呢?
中国人工智能的发展
人工智能的时代无疑已经到来,这个时代需要的当然就是掌握了人工智能并将其解决具体问题的工程师。坦率的说,市场上这一类的工程师还属于凤毛麟角。职场上的薪酬待遇可以看得出来这样的工程师的抢手的程度。人工智能这门学科发展到今天,就学术自身而言已经具备了大规模产业化的能力。
所以说,对于工程师而言当务之急就是尽快的掌握应用人工智能的应用技术。当下在互联网上关于人工智能的学习资料可以说已经是“汗牛充栋”,那些具备了快速学习能力的工程师一定会在人工智能的大潮当中脱颖而出。
中国发展人工智能产业的环境已经具备。无论从创业环境、人员的素质乃至市场的机遇而言完全具备了产生产业变革的一切条件。与美国相比较,在人工智能的许多领域中国团队的表现也可以说是不逞多让。就人工智能的技术层面而言,中国的工程师与全球最好的技术团队正处于同一个起跑线上。
时不我待,中国的工程师是有机会在这个领域大展身手的。不过值得注意的是,要切忌两点:一是好高骛远,盲目与国外攀比。毕竟积累有长短,术业有专攻,我们要立足于已有的积累,寻求逐步的突破。二是一拥而上,盲目追求市场的风口。人工智能的工程化需要大量的基础性的积累,并非一蹴而就简单复制就可以成功。
中国的科研技术人员在人工智能领域的成就有目共睹。在王咏刚的一篇文章里面,他统计了从2013年到2015年SCI收录的“深度学习”论文,中国在2014年和2015年超已经超过了美国居于领跑者的位置。
另外一让我感到惊讶的事情,Google的JeffDean在2016年发表过一篇名为《TensorFlow:Asystemforlarge-scalemachinelearning》的论文。文章的22个作者里面,明显是中国名字的作者占已经到了1/5。如果要列举中国人/华人在人工智能领域里的大牛,吴恩达、孙剑、杨强、黄广斌、马毅、张大鹏……很容易就可以说出一大串。
对于中国来说目前的当务之急是人工智能技术的产业化,唯有如此我们才可以讲科研/智力领域的优势转化为整体的、全面的优势。在这一点上,中国是全球最大的消费市场以及制造业强国,我们完全有机会借助市场的优势成为这个领域的领先者。
硅谷创新企业
硅谷虽然去过许多回,但一直无缘在那里长期工作。在人工智能领域的市场我们听到的更多是围绕Google、Apple、Intel、Amazon这样的一些大型科技公司的一举一动。但是在美国市场上还有一大批小型的创业企业在人工智能这个领域有惊艳的表现。仅以硅谷区域的公司为例:
Captricity,提供了手写数据的信息提取;
VIVLab,针对语音识别开发了虚拟助手服务;
TERADEEP,利用FPGA提供了高效的卷积神经网络的方案;
还有提供无人驾驶解决方案的NetraDyne。
这个名单还可以很长,还有许许多多正在利用人工智能技术试图去创造历史的团队正在打造他们的梦想。这些团队以及他们正在专注的领域是值得我们去学习和体会的。