神经网络:比原来更容易学习了

2023-05-16

origin: http://geek.csdn.net/news/detail/195039

原文:NEURAL NETWORKS: YOU’VE GOT IT SO EASY
作者: Steven Dufresne
翻译:雁惊寒

随着黑客、学生、研究人员以及企业数量的增加,神经网络越来越流行。最近一次复苏是在80、90年代,当时几乎没有网络,也没有神经网络相关的工具。本次复苏始于2006年左右。从一个黑客的角度来看,在那个时候都有哪些可用的工具和资源?现在又有哪些?我们对将来的期望又是怎么样的呢?对我个人来说,树莓派上的GPU正是我所期盼的。

80、90年代

阅读本文的年轻人可能想知道,在互联网没有发明之前,我们这些老家伙是如何接触到新知识的。其实,纸质杂志在当时起到了相当大的作用。比如,《科学美国人》杂志在1992年9月的心灵与大脑特刊便让我第一次接触到了神经网络,既是在生物学上,也是在人工智能学上。

在当时,你既可以自己从头编写神经网络程序,也可以从其他地方订购一套包含源代码的软盘。我就曾经在《科学美国人》杂志的《美国科学家》专栏订购了这么一套软盘。当然,你也可以购买一套能够开发低级别的、复杂的数学神经网络开发库。比如,在多伦多大学,就有一个名叫Xerion的免费的模拟器。

如果你经常关注书店里科学类书刊的话,你有时候也会发现这方面的书籍,最经典的就是曾经出版过两卷的《并行分布式处理探索》,作者是Rumelhart、 McClelland等人。我最喜欢的一本书是《神经计算与自组织映射导论》,如果你对利用神经网络来控制机械臂感兴趣,这本书对你来说将会受益匪浅。

当然,你也可以参加一些短期的课程和会议。我在1994年曾经参加了一个为期两天的免费会议,这个会议最早是由Geoffrey Hinton主办的,后来改由多伦多大学主办。这个会议无论是在当时,还是在现在,都是神经网络领域的领导者。当时被誉为最好的年度会议是神经信息处理系统会议,它在当今仍然很受欢迎。

最后,我把为了发布论文而开发的神经网络程序整理了一遍。同时,我把所有的会议论文、课程讲义、复印的文章和手写的笔记统统摞了起来,足足达到了3英尺厚。

神经网络在经历了80、90年代的复苏后,又逐渐变得相对低调起来。从整个世界来看,除了对于个别研究团队,它已经变得不再重要。伴随着缓慢的改进以及一些小小的突破,神经网络始终保持着很低调。直到大概2006年左右,它又在世界范围内引发了一场大爆炸。

现在

现在我们来看一下神经网络工具得到重大突破的一些地方:

  • 超过了三层甚至四层深度的新的训练网络技术,称之为深层神经网络
  • 通过使用GPU(图像处理单元)来加速训练
  • 包含大量样本的训练数据的有效性

神经网络框架

现在有非常多的神经网络框架,他们使用了各种不同的授权协议,允许用户免费下载。其中很多还是开源框架。大部分的流行框架允许你在GPU上运行神经网络,并且支持大多数的神经网络算法。

下文将介绍一些流行的框架,他们都支持GPU,除了模糊神经网络。

  • TensorFlow

开发语言:Python,C++

TensorFlow是Google公司推出的最新的神经网络框架,它专门为分布式而设计。作为一个底层框架,虽然有着非常大的灵活性,但是也比高级框架(例如Keras和TFLearn,下文会有介绍)拥有更陡的学习曲线。目前,Google正在开发Keras集成在TensorFlow中的版本。

推荐Hackaday网站上的两篇文章“能识别锤子和啤酒瓶的机器人”和“TensorFlow入门”一睹TensorFlow的风采。

  • Theano

开发语言:Python

这是一款用来做多维矩阵高效数值计算的开源库。它出自蒙特利尔大学,可运行在Windows、Linux和OS X上。Theano发布于2009年,已经存在了很长时间。

  • Caffe

开发语言:命令行, Python, MATLAB

Caffe是一款由伯克利人工智能研究所和社区贡献者共同开发的开源库。在Caffe中,你可以使用文本文件来定义模型,然后通过命令行工具来进行处理。Caffe同时也有Python和MATLAB接口。例如,首先使用文本文件定义模型,然后在另外一个文本文件中给出详细的训练方法,然后通过命令行工具读入这两个文件,这样就能开始训练神经网络了。最后,你可以使用Python程序来调用这个已经训练好的神经网络来实现一些功能了,比如说把图片进行分类。

  • CNTK

开发语言:Python, C++, C#

这是微软的认知开发包(CNTK),可运行在Windows和Linux上。微软目前正在开发一个内部使用Keras的版本。

  • Keras

开发语言:Python

这个库以TensorFlow或者Theano作为底层,这样可以使其用起来更加简单。Keras同时也有支持CNTK的计划。目前,把Keras融入到TensorFlow的工作正在进行中,而以后就会出现一个仅支持TensorFlow的独立的版本。

  • TF Learn

开发语言:Python

跟Keras一样,是一个基于TensorFlow的高级别的库。

  • FANN

开发语言:支持超过15种语言,但不支持GPU

这是一个使用C语言开发的高级别的开源库,仅可用于完全连接和稀疏连接的神经网络。然而,FANN却已经流行了很多年,甚至已经包含在一些Linux发行版中。Hackaday最近的一篇“通过强化学习来让机器人学习走路”中提到了关于FANN的使用。

  • Torch

开发语言:Lua

一款使用C语言开发的开源库。特别要注意的一点,在Rorch官网上特别注明了该框架支持嵌入式设备,例如iOS、Android和FPGA。

  • PyTorch

开发语言:Python

PyTorch相对来说还是比较新的,在其官网上注明了目前还属于早起的测试版,但似乎现在已经吸引了很多人的目光。它运行在Linux和OS X上,并以Torch作为底层。

你应该选择哪一个框架呢?除编程语言或者操作系统对你来说是影响选择的一个大问题,如果你觉得数学太难,或者不想深入地挖掘神经网络的细节,那么尽量选择一个高级的框架吧。在这种情况下,请远离TensorFlow,因为相对于Kera、TFLearn或者其他高级框架,你必须去学习更多的API函数。该框架在强调自身具有强大数学功能的同时,也需要你去花费更多的精力来创建神经网络。另外一个影响你选择框架的因素是你是否需要做基础研究,一个高级框架可能不会让你能接触到内部逻辑。

在线服务

你是否正在寻找一种可用的神经网络库,但你又不想花费太多的时间去学习呢?这里有一些互联网在线服务可以满足你的要求。

我们已经看到了无数使用亚马逊Alexa语音识别服务的例子。Google也提供了包括视觉和语音的云机器学习服务。这方面的例子有:使用树莓派来对糖果进行排序,以及识别人类的表情。Wekinator是一款针对艺术家和音乐家的软件,它可用于训练神经网络,可以让人们用手势来控制屋内的电器的开关。当然了,微软也有自己的认知服务API,包括视觉、语音、语言等多个方面。

GPU和TPU

遍历一个神经网络

遍历一个神经网络

训练一个神经网络需要循环迭代访问整个神经网络,包括正向的和反向的,每次迭代都会提高神经网络的精度。从某种程度上来说,迭代的越多,最后的精度也越高。总的迭代次数可能会达到几百次甚至上千次。对于80、90年代的计算机来说,要实现足够多的迭代次数可能需要花费的不可思议的时间。文章“深度学习神经网络:概述”提到,在2004年,GPU的使用使得完全连接神经网络的速度提高了20倍,在2006年,卷积神经网络的速度提高了4倍,到2010年,使用CPU来训练的速度比使用GPU提高了50倍,神经网络的精度也越来越高。

Nvidia Titan Xp显卡
Nvidia Titan Xp显卡。 图片来源: Nvidia

GPU是如何来提高训练的速度的呢?训练神经网络最重要的部分是做矩阵乘法运算,在这方面,GPU要比CPU快得多。显卡和GPU的市场领导者,Nvidia公司,创建了一套名叫CUDA的API,神经网络软件可以使用这套API来充分利用GPU。今后,我们会经常看到CUDA这个词。随着深度学习的发展,Nvidia公司又增加了不少API,包括CuDNN(用于深度神经网络的CUDA)。

Nvidia也有自己的单板计算机:Jetson TX2。该计算机主要用来设计自动驾驶汽车的大脑、自动拍照的无人机等等。当然,我们也要指出,这个电脑的价格还是有点高的。

Google公司也一直致力于设计自己的硬件加速系统:张量处理单元(Tensor Processing Unit,TPU)。你可能也注意到这个名字与上文介绍的Google框架TensorFlow有相似地方。根据Google关于TPU的论文描述,TPU是为神经网络的归纳阶段而设计的。归纳不是指训练神经网络,而是说使用训练后的神经网络。我们目前还没有看到有任何框架使用TPU,但是我们还是要记住这个东西的。

使用其他人的硬件

你是否有一个不支持GPU,或者你不想耗费自己的计算资源但是又需要花很长时间来训练的神经网络?在这种情况下,你可以使用互联网上的云计算服务。例如,FloydHub,它对于个人来说并没有月租费,而且每小时只需要话费几分钱。还有另外一个选择:Amazon EC2。

数据集

使用打过标记的数据来训练神经网络
使用打过标记的数据来训练神经网络

神经网络的突破之一是包含大量样本的训练数据有效性。在训练一个使用监督训练算法的神经网络的时候,需要有大量的数据作为输入,并且也要告知预期的输出结果是什么。在这种情况下,输入的数据需要打上标记。如果你给神经网络的输入是一匹马的图片,而它的输出却说这个图片看起来像一只猎豹,那么它需要知道这个输出是错误的。预期输出称为标签,而输入数据就是“打了标记的数据”。

在网上有很多这样的数据集可用来训练神经网络。MNIST是用来训练手写字符识别的数据集,ImageNet和CIFAR是用于标记图像的两个不同的数据集。而更多的数据集可以在维基百科上找到。上文列出的很多框架都提供了相应的教程以及必需的数据集。

当然了,这并不是说你必须要有一个大的数据集才能获得高的准确性。我们上文提到的使用FNN框架的步行机器人,它是使用伺服电机的位置来作为训练数据的。

其他资源

不同于80、90年代,虽然你现在仍然可以购买到关于神经网络的印刷书籍,但是很多都是在线的了。我喜欢的两本在线书籍,一本是麻省理工学院出版社的《深度学习》,还有一本是《神经网络与深度学习》。上文列出的那些框架都包含了初学者的入门教程,并且只要你能上网上进行搜索,都能找到无数的网站和YouTube视频资源。我发现YouTube上的讲座和会议视频非常的有用。

未来

包含GPU的树莓派7
包含GPU的树莓派7

毫无疑问,未来将会看到更多的框架。

长期以来,虽然我们一直能在市场上看到一些专门的神经芯片和电路板,但是它们并没有形成一个巨大的市场,因为它们并不是为神经网络软件这个真正快速增长的领域而设计的。而GPU正是服务于这个市场的。由于包含图像、声音、语言的神经网络会越来越多的进入到小型的消费者设备中,因此需要针对该软件量身定制更多的GPU或处理器,而这些可能会成为树莓派或Arduino板上的一个新模块(注:事实证明,树莓派上有一个GPU)。这并不意味着所有上文提到的框架都会使用这个新模块,例如,TensorFlow仅支持Nvidia CUDA。 但是,您仍然可以使用GPU来运行自己的神经网络代码。

目前,GPU已经受到了来自于像TPU这样的ASIC的竞争,并且以后我们还会看到更多的竞争者,甚至它们可能在神经网络中完全取代GPU。

神经网络作为我们日常生活的一部分一直都存在着,人工智能会长期保持一定的低调,直到有人做出重大的突破时,它才能再次引起轰动。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络:比原来更容易学习了 的相关文章

  • 关于GD32的CMakeLists以及gcc部分编译选项的解释

    set CMAKE SYSTEM NAME Generic cmake最低版本 cmake minimum required VERSION 3 0 0 工程名称 语言 project TEST PRJ NAME LANGUAGES C C
  • ulimit -s 指定栈上的内存上限

    转自 xff1a http blog chinaunix net uid 24439730 id 144094 html ulimit s 指定栈上的内存上限 xff0c 单位为KB xff0c 如 xff1a root 64 wdqf1w
  • C++头文件重复包含问题

    为了避免同一个文件被include多次 有两种方式 1 span class token macro property span class token directive keyword ifdef span SOMEFILE H spa
  • TCP(select函数模型)

    客户端代码 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt st
  • i2c那些坑

    origin http bbs ntpcb com simple t126695 html I2C 的那些坑 一般情况下 xff0c i2c 设备焊接没什么问题 xff0c 按照设备手册一步步来 xff0c 基本上就顺风顺水能够用起来 如果
  • stm32f103系列引脚定义-功能图

    器件功能和配置 STM32F103xx增强型 STM32F103xx增强型模块框架图 STM32F103xx增强型VFQFPN36管脚图 STM32F103xx增强型LQFP100管脚图 STM32F103xx增强型LQFP64管脚图 ST
  • 用数百行代码实现60亿设备互联:微软重金收购的ThreadX硬在何处

    origin https www sohu com a 315222502 485057 2019年4月 xff0c 微软收购了ThreadX的母公司Express Logic 公司 而ThreadX有几亿个设备在运行 1 物联网操作系统简
  • Cache和DMA一致性

    cache读必须要buffer是cacheline对齐的 DMA应该多多少少知道点吧 DMA Direct Memory Access 是指在外接可以不用CPU干预 xff0c 直接把数据传输到内存的技术 这个过程中可以把CPU解放出来 x
  • stm32几种低功耗模式的实现和差别

    origin https blog csdn net jian3214 article details 99818603 01 前言 按功耗由高到低排列 xff0c STM32具有运行 睡眠 停止和待机四种工作模式 上电复位后 STM32
  • threadx也开源了

    前一段时间ucos开源了 xff0c 今天微软收购的threadx也开源了 xff0c 行业剧变呀 xff01 xff01 xff01 2020 5 26
  • armv8-M 32bit处理器

    https www eet china com mp a14579 html https developer arm com ip products processors cortex m 最早的Cortex M0属于Armv6 M架构 x
  • 作为ARM Cortex-M家族的继承者 Cortex-M23与M33有哪五大特色?

    http news eeworld com cn xfdz article 2017011259937 html 集微网消息 xff0c ARM处理器在嵌入式设备领域的应用非常广泛 基于ARM Cortex处理器的片上系统 xff08 So
  • emmc5.1, ufs2.0, ufs3.0

    总的来说 xff0c UFS3 0的综合性能 xff0c 特别是持续读写速度有着秒杀UFS2 1前辈的表现 xff0c 只是在随机读写和SQLite性能上 xff0c 却依旧和双通道的UFS2 1持平 xff0c 有些小遗憾 最后 xff0
  • 串行Norflash是如何实现XIP的?

    先说问题 xff1a 要想程序在串行的Norflash中运行 xff0c 到底需要做哪些工作 xff1f Norflash和Nandflash想必大家都知道 恕本人才学疏浅 xff0c 最近突然发现Norflash可以并行连接实现XIP x
  • ARM汇编语言 - 简介 [一]

    origin https zhuanlan zhihu com p 82490125 ARM汇编语言 简介 一 兰新宇 talk is cheap 说明 xff1a 本系列文章将主要以ARMv7和ARMv8架构为例 xff0c 介绍ARM汇
  • ARM汇编语言 - 简介 [二]

    上文介绍了ARM的数据传送指令 xff0c 本文将主要介绍ARM中的移位 序转和位操作等数据处理指令 移位指令 移位包括逻辑移位和算术移位 xff0c 所谓 逻辑 就是将寄存器中存放的内容仅仅视为一串bits xff0c 移位的时候只需要将
  • 智能小车开发的重点之一电机该如何选型

    一 智能小车的分类 二 电机的分类 无刷电机要好于有刷电机 xff0c 优点 xff1a 1 没有损耗 xff0c 有刷电机有寿命 2 静音 xff0c 有刷电机噪音比较大 无刷电机分为带霍尔传感器和不带霍尔传感器两种 xff0c 因为无刷
  • ARM汇编语言 - 简介 [三]

    上文介绍了ARM的数据处理指令 xff0c 本文将主要介绍ARM中的跳转指令 跳转指令 无条件跳转 ARM中的基础跳转指令就一个字母 34 B 34 xff0c 代表Branch xff0c 相比起x86中和它功能基本相同的 34 jmp
  • CAN总线35周年特别篇 -- CAN总线的前世今生

    origin https mp weixin qq com s MloRz 4sio8QGdNItNRBjQ CAN总线35周年之际 xff0c 花了一晚上时间整理翻译了下 xff0c 通过这个帖子大家会对当前市场上各种CAN名词有的全面系
  • 微控制器CPU性能测试基准CoreMark

    origin https www cnblogs com henjay724 p 8729364 html 痞子衡嵌入式 xff1a 微控制器CPU性能测试基准 EEMBC CoreMark 大家好 xff0c 我是痞子衡 xff0c 是正

随机推荐

  • 意外发现,Cortex-M7的性能和诸多关键参数碾压A7和R7

    origin https www amobbs com thread 5676525 1 1 html 之前一直以为ARM A R M M排在最后也最便宜 xff0c 肯定性能最低 xff0c 但最近意外发现并非如此 xff0c M7居然完
  • gcc之-fomit-frame-point

    Kernel里的dump stack oops打印出来的backstrace调用链表是怎样实现的呢 xff1f 大家都知道当发生函数调用的时候 xff0c 函数的参数传递 xff0c 返回值传递都要遵循一定的规则 xff0c 在ARM体系架
  • Lauterbach trace32与 jlink

    一直不太明白trace32为何这么贵 xff0c 这篇文章讲了一些 xff0c 稍微明白一点了 一个小工具背后的故事 昨天我们推送了华为任正非2012年的讲话稿 真正的出路 xff1a 重读任正非2012实验室讲话 任总是在商场上真刀真枪干
  • 嵌入式开发输出调试信息的几种方法(常规法及非常规法)!

    origin https mp weixin qq com s 7LolqWUeJ4tCENh6yVmvXw 嵌入式开发的一个特点是很多时候没有操作系统 xff0c 或者没有文件系统 xff0c 常规的打印log到文件的方法基本不适用 最常
  • 从零开始,耗时两年,19岁小伙自制一块32位Risc-V处理器,可玩「贪吃蛇」

    从零开始 xff0c 耗时两年 xff0c 19岁小伙自制一块32位Risc V处理器 xff0c 可玩 贪吃蛇 脚本之家 今天 关注 脚本之家 xff0c 与百万开发者在一起 本文经机器之心 xff08 微信公众号 xff1a almos
  • 揭秘被Arm编译器所隐藏的浮点运算~

    以下文章来源于Mculover666 xff0c 作者mculover666 引言 笔者接触嵌入式领域软件开发以来 xff0c 几乎用的都是 ARM Cortex M 内核系列的微控制器 感谢C语言编译器的存在 xff0c 让我不用接触汇编
  • main之前初始化流程

    本文分别介绍Keil调用的ARMCC以及ARM NONE EABI GCC两个编译器在main之前的操作 xff1a Keil MDK启动文件 总结一下MDK的启动流程 xff1a 1 系统初始化 xff0c 包括中断向量表的重新映射 2
  • 嵌入式单片机之STM32F103C8T6最小系统板电路设计参考

    STM32F103C8T6最小系统板电路设计 一 电源部分 设计了一个XH插座 xff0c 以便使用3 7V锂电池供电 xff0c 接入电压不允许超过6V 二 指示灯部分 电源指示灯可以通过一个短路帽控制亮灭 xff0c 以达到节电的目的
  • 国产射频前端,攀登新高峰

    2022年 xff0c 国产射频前端开启新篇章 射频前端包括功率放大器 xff08 PA xff09 滤波器 xff08 Filter xff09 开关 xff08 Switch xff09 低噪声放大器 xff08 LNA xff09 天
  • slam相关文章

    1 视觉SLAM漫谈 http www cnblogs com gaoxiang12 p 3695962 html 2 学习SLAM需要哪些预备知识 xff1f https www zhihu com question 35186064 3
  • 工业机器人主要核心

    主要核心为三部分 xff0c 控制器 xff08 就是用来控制机器人动作的那个手持设备 xff0c 可以用来编程 xff0c 一般用vxworks和linux xff0c wince来实现 xff09 伺服电机和减速器用来实现机器人的动作
  • 想搞工业机器人 这五大方面你必须了解

    origin http www robot china com news 201510 09 25754 html 1 工业机器人控制系统硬件结构 控制器是 机器人 系统的核心 xff0c 国外有关公司对我国实行严密封锁 近年来随着微电子技
  • 为什么我选择并且推崇用ROS开发机器人?

    origin http www leiphone com news 201701 zBHXGJcsRTioj4gH html 雷锋网 公众号 xff1a 雷锋网 按 xff1a 本文来自知乎 xff0c 作者贾子枫 xff0c 雷锋网已获授
  • 一飞智控CEO齐俊桐:一篇文章教你看透无人机飞控这十年

    origin http www leiphone com news 201702 YO2bskI7smE1U8TA html 无人机 又一个被国人玩坏了的单词 科幻电影里的无人机 10年前说自己是搞无人机的 xff0c 无不引来疑惑和赞叹的
  • 机器人框架

    ROS Rock Yarp Orocos
  • 列王的纷争-深度传感器已被巨头瓜分?

    origin http mt sohu com 20170325 n484729546 shtml 我们常常说苹果富可敌国 但是你这么说其实是在侮辱苹果 苹果可比美国政府有钱多了 根据最新消息 xff0c 美国政府账上的现金 xff0c 只
  • 不得不看!国内深度摄像头方案大起底

    origin http pieeco baijia baidu com article 517947 引言 xff1a 市场对深度视觉技术需求趋于井喷 xff0c 但可以提供产品和方案的公司寥寥无几 xff0c 本文分析了国内三家各具特点的
  • VR中的9轴传感器(重力加速度/陀螺仪/磁力计)

    origin http blog csdn net dabenxiong666 article details 53836503 前言 传感器的调试过程 xff0c 一般根据原厂提供demo代码 xff0c 调试数据接口 xff0c 将数据
  • STM32中AD采样的三种方法分析

    在进行STM32F中AD采样的学习中 xff0c 我们知道AD采样的方法有多种 xff0c 按照逻辑程序处理有三种方式 xff0c 一种是查询模式 xff0c 一种是中断处理模式 xff0c 一种是DMA模式 三种方法按照处理复杂方法DMA
  • 神经网络:比原来更容易学习了

    origin http geek csdn net news detail 195039 原文 xff1a NEURAL NETWORKS YOU VE GOT IT SO EASY 作者 xff1a Steven Dufresne 翻译