深度学习_循环神经网络RNN与LSTM
深度学习 _ 循环神经网络 RNN
与 LSTM
1. 循环神经网络 RNN
1) 什么是 RNN?
循环神经网络(RNN)是一种节点定向连接成环的人工神经网络。具体应用有语音识别,手写识别,翻译等.
2) 什么时候使用 RNN?
FNN(前馈神经网络,如 BP,CNN 等)效果已经不错了,RNN
还需要更大量的计算,为什么要用 RNN 呢?如果训练 N
次,每次和每次都没什么关系,那就不需要
RNN,但如果每个后一次都可能和前一次训练相关,比如说翻译:一个句子里面N个词,一个词为一次训练(train
instance),一个词的意思很可能依赖它的上下文,也就是其前次或后次训练,这个时候就需要
RNN.
3) RNN 与 FNN 有何不同?
如图所示,左边的是前馈神经网络,数据按黑箭头方向从输入层经过隐藏层流入输出层,向前流动,因此叫做前馈网络.右图中,隐藏层中的数据除了传向输出层,还和下次输入一起训练后续的隐藏层,不再是单向,而是包含了循环,则构成了循环神经网络.下图是将各个时间点画在同一图上,左边前馈
FNN 的展开图,右边是 RNN 的展开图.
简单地说,它只是在隐藏层处加了 ...
深度学习_卷积神经网络CNN
深度学习 _ 卷积神经网络 CNN
1. 引入
卷积神经网络(CNN)是一种专门用来处理具有网格结构数据的神经网络.它属于前馈神经网络,它被定义为:至少在某一层用卷积代替了矩阵乘法的神经网络.最常见的应用场景是图像识别.
前篇我们自己动手,用 Python 实现了一个 BP 神经网络,本篇我们在 Keras
框架之下实现卷积神经网络(Keras 框架详见《深度学习 _ 工具》篇).Keras
几乎是搭建 CNN
最简单的工具了,然而原理并不简单:除了基本的神经网络中用的误差函数,激活函数等概念以外(具体详见《深度学习
_BP 神经网络》),CNN 还用到了卷积,池化,DropOut
等方法.将在本文中逐一介绍.
2. 原理
1) 图像识别
先来看看图形学中的图像识别是如何实现的.
图片.png
我们拿到了原图(图上左),一般先将其转换成灰度图(图上中).然后进行边缘检测,图像处理中常使用计算梯度方法(判断某像素与它相邻像素的差值)检测边缘.在
CNN 中我们用卷积来检测:先设计一个卷积核计算相邻像素的差值,然后用
ReLU(f(x)=max(0,x)) 激活函数将那些差值小的置为 ...
深度学习_BP神经网络
深度学习 _BP 神经网络
1. 说明
现在使用深度学习算法都以调库为主,但在使用库之前,先用 python
写一个最基本的神经网络的程序,也非常必要,它让我们对一些关键参数:学习率,批尺寸,激活函数,代价函数的功能和用法有一个直观的了解。
2. 原理
1) BP 神经网络
BP
神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络.这又前馈又逆向的把人绕晕了.先看看什么是前馈神经网络,回顾一下《深度学习
_ 简介》中的图示:
图片.png
这是一个典型的前馈神经网络,数据按箭头方向数据从输入层经过隐藏层流入输出层,因此叫做前馈.前馈网络在模型的输出和模型之间没有反馈,如果也包含反馈,则是循环神经网络,将在后续的
RNN 部分介绍.
前向网络和循环网络的用途不同,举个例子,比如做玩具狗,前馈是用不同材料和规格训练N次,各次训练之间都没什么关系,只是随着训练,工人越来越熟练.而循环网络中,要求每次做出来的狗都是前次的加强版,因此前次的结果也作为一种输入参与到本次的训练之中.可把循环网络理解成前馈网络的升级版.本篇讲到的
BP
神经网络,以及处理图像常用的卷积神经网络都是前馈网络 ...
深度学习_工具
深度学习 _ 工具
1. 引入
深度学习的工具有很多 Tensorflow, Theano, Caffe, Keras, MXNet,
Scikit-learn…有用 c++ 写的,有用 Python 写的,还有R的,Java
的,从哪里入手呢?
先看看最热门的
Tensorflow,它是谷歌研发的人工智能学习系统,主要优点是分布式计算,特别是在多
GPU 的环境中。Theano
也是比较低级的库,一般单机使用.什么是低级库?就像炒回锅肉不用从杀猪开始,杀猪就是比较低级的工作,已经有人帮你做好了,像
Keras 这种较上层的工具,它把 Theano 和 TensorFlow 包装成了更具人性化的
API。至于是选择低级工具,还是上层工具,主要取决于您的目标是开肉联厂还是开饭馆.
图片.png
2. 工具简介
Caffe 是 c++
写的库,是较低层级的库,它是个老牌的工具,工作稳定,性能也好,还提供绑定到
Python 上的编程语言,但相对没有 Python 类工具灵活.
Theano 是一个低级库,透明地使用 GPU
来完成数学计算.也是一个老牌的工具,工作比较稳定,只支持单机 ...
深度学习_简介及相关概念
深度学习 _ 简介及相关概念
1. 传说
传说深度神经非常神奇,把那些浅层学习都给甩出十万八千里去了!还需要什么特征工程?卷积神经网络的特征都是自动识别的!只要用正确的条件和结果训练得足够多,以后给条件就能自动出结果了,比教人还简单!它模拟的可是人类的大脑,现在的运算量已经赶上猫狗的脑了,只要运算足够大足够快,机器人分分钟就消灭人类!
这些只是传说,它夸大的事实的一部分,而故意忽略了另一部分.不过,树立的典型不都这样么?看
2010 年以来最热门的卷积神经网络(CNN)的发展,从 AlexNet 到
RssNet,就可以看到,它主要解决了什么问题,具体怎么用,离强人工智能还有多远。
其实,神经网络就是机器学习的一种,机器学习又是人工智能的一种。现在一说人工智能就说深度学习,不懂这个就太
out
了。环境就是这样,也只好花时间来了解一下了,此专题大致分为:简介,入门工具,BP
实现,CNN,RNN,技巧这几部分来介绍一下。
2. 引入
简单地举个例子:有一家玩具工厂,想通过试生产的方式培养员工的生产玩具的能力.具体过程是提供
3 种材料(输入),和 1
种成品(输出),让工人们练手(此例 ...
比特币挖矿——集群矿池btcpool
比特币挖矿——集群矿池 btcpool
#区块链
1. 介绍
btcpool 一个集群的解决方案,它使用了 mysql 数据库,web
服务,kafka,zooKeeper,据说可以控制 100000
矿机。代码中逻辑和安装说明都比较完整,但还需要一些编写一些 web 界面做 UI
支持。配好之后就和其它大矿池差不多了。
挖矿的哈希碰撞需要大量计算,由矿机实现。而拆分集成运算量,分配任务,在矿机多的情况下也需要大量的算力支持。Btcpool
是一个去中心化集群的解决方案(矿池内部去中心,对外自成体系)。N
个矿机连一个控制板,控制板接入网络,通过端口连服务器,服务器再把拆分运算量的工作分担给矿池内的多台服务器同时计算。
它的主旨就是整套系统切分成功能块,块与块之间用使用 kafka
传递数据和信息,后台由 zooKeeper
负载均衡,从而使不同的功能块运行在不同的服务器上。像钱包和 mysql
这种频率使用的公用数据放在另外的服务器上,各功能块通过 rpc,zmp
等方式访问它们。
其中最核心的程序是 sserver,矿机控制板连接的就是该程序。它支持
Stratum
协议。现在一般 ...
比特币挖矿——建立Kafka&ZooKeeper集群
比特币挖矿——建立
Kafka&ZooKeeper 集群
#区块链
1. 介绍
采用 ZooKeeper+Kafka
的方式建立集群,主要支持了消息传递和负载均衡,常见的一些文档,有的是概念较多,没有实际操作;有的只有命令,不知其原理。这里就结合集群矿池来说说它的具体应用场景,原理,以及具体实现。
图片.png
2. 举例
先举个例子,比如一个理发店:
一开始只有一个理发师,洗剪吹都由他一个人负责,那么只能一个客人做完全套(同一台机器上操作各个步骤),再给下一个客人服务。
之后,
又来了几个理发师,每个人负责接待一个客人(多台服务器,每台负责单个流程)。
再后来理发店又扩大,人多了(多台不同用途的机器),老板发现如果把工作细分为:洗
(A) 剪 (B) 吹 (C)
三部分,这三部分的工作量和难度都不同,可以安排专人专职,以节约人力成本。三个模块工作量不同,需要的人数也不同,如上图所示,洗
2 人 (2 台机器),剪 3 人 (3 台机器),吹 2 人 (2 台机器)。Data 为库房
(数据服务器),每个人都可能去库房存取工具。
显然,A 与 B
并不是一一对应的关系。洗 ...
比特币挖矿——控制器与矿机
比特币挖矿——控制器与矿机
#区块链
1. 介绍
只要把矿机插电、插网, 开启电源,它就可以 24
小时源源不断的生产虚拟货币。听起来热血沸腾吧!下面就来看看矿机怎么连网和挖矿的.矿机有很多种,有的集成很多显卡.有的看起来像台电脑,有的像个U盘.
图片.png
无论哪种矿机,至少都包含连网和计算两个部分.连网部分负责收发计算数据和证明挖矿者身份,计算部分负责具体的挖矿.这里我们来考虑最常见的一个控制板带多个矿机,连接他人矿池的情况.矿工只在设置的时候需要电脑或者手机连接到控制器的
web
界面,其余时候只要启动控制板和矿机即可挖矿(有些矿机和控制板是一体的)。当然这里指的是连他人的矿池,如果自己做矿池,矿池也是需要机器的.
2. 控制器(与网络相连部分)
下面以树莓派控制板为例分析,控制内部如何运作,以及如何与上下层交互。一般树莓派都自带再
dhcp 客户端,连上网线就能自动获取 IP 地址,其上运行一个 WebServer,外加
miner-web 工具,即可支持矿机的 Web
设置界面。矿工通过路由器看找到分给控制器的 IP 地址,然后用 http
连接的方式来设置它,此时需 ...
比特币挖矿——钱包
比特币挖矿——钱包
#区块链
1. BitCoin 钱包
BitCoin 是钱包的一种,目前它需要下载上百 G
的数据,且之后还会不断增加,其它钱包也有数据比较少的,但是做矿池一般用
bitcoin,可以把它看成实时更新的矿池数据库。
如果想做矿池的话,必须把钱包数据下到本地,而且后台进程要一直开着更新数据。还需要给钱包加密。
2. 安装配置钱包
1) 安装
1$ apt-get install bitcoind
2) 修改配置文件
12345678$ vi bitcoin.conf # 内容如下rpcuser=abcrpcpassword=123server=1rpcallowip=127.0.0.1addnode=14.111.41.235addnode=180.109.106.68addnode=119.129.41.15
注意,这里的 user 和 password 是 RPC
的用户名密码,它和钱包地址没关系,随便设什么都可以,只要和挖矿服务(如:p2pool
或 btcpool)设的一致即可。
3) 运行
i. 本机上执行
1$ bitcoin-qt
ii.
服务端执行(远 ...
比特币挖矿——区块链技术
比特币挖矿——区块链技术
#区块链
1. 说明
区块链具有数据运行公开、不可篡改、可溯源、跨国际、去中心化的特点。因此越来越多地被应用在各个领域。区块链主要技术包括:分布式数据存储、点对点传输、共识机制、加密算法,将在下面一一介绍。
2. 点对点传输
点对点技术(peer-to-peer,简称
P2P)又称对等互联网络技术,它依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。最典型的应用就是电驴。在这里它提供了最底层的去中心化支持。
3. 分布式数据存储
先看看对区块链最直观的感觉:当第一次运行比特币钱包时,会下载很多数据,2017
年 10 月有 150G 左右,且还在不断增加。数据存储在 data/blocks
目录下,blk*.dat 这就是区块 block。
第一个问题是:为什么建矿池需要下载这么多数据?区块链本质上是一个去中心化的数据库,我们下载的是比特币所有数据所组成的数据库,因此很大。去中心化的数据库,数据并不是保存在某一个服务器上,而且在
P2P
的每个节点上都需要保存一份。对于中心化的数据库,数据库可能被宿主或者黑客篡改,因而可靠性变差。而去中 ...