机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5279|回复: 15
打印 上一主题 下一主题

使用MXNet远程编写卷积神经网络用于多标签分类

[复制链接]
跳转到指定楼层
楼主
发表于 2017-3-14 20:33:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近试试深度学习能做点什么事情。MXNet是一个与Tensorflow类似的开源深度学习框架,在GPU显存利用率上效率高,比起Tensorflow显著节约显存,并且天生支持分布式深度学习,单机多卡、多机多卡支持丰富,拥有着良好的技术架构。目前是亚马逊AWS的官方深度学习框架。由于其团队以MXNet产品本身为先,所以文档资料较少。现在还稍微多了一点。

1. 搭建Jupyter notebook远程开发环境
Jupyter notebook支持python、R、shell等等,功能非常全面。基于Jupyter notebook,我在实验室的K80 GPUs服务器上搭建MXNet环境(搭建步骤见官网,很简单,131上已装好),然后利用SSH隧道传输,可以随时随地在浏览器里编程,使代码加速运行在K80 GPUs设备上。

Step-by-step教程见博客:http://www.cnblogs.com/shixiangwan/p/6406777.html

此外,Jupyter notebook默认的主题不好看,可以定制更喜欢的编程字体:https://github.com/dunovank/jupyter-themes

2. 卷积神经网络(CNN)

CNN较适合于矩阵特征,例如图像分类,目标检测。生物信息学方面,蛋白质的二级结构预测也有相关paper,牛津出版社的《Deep learning in bioinformatics》叙述很详细(点击看大图):


当然,CNN也是非常基础的,目前还有RNN(递归神经网络),LSTM(长短记忆网络,NLP和speech领域居多),残差网络(更深且快的卷积网络),GAN(生成对抗网络,亦有很多衍生结构)等等,技术更迭非常之快,一个比较好的书籍是《Deep Learning》,Github上有民间中文版。

对于一些多标签分类任务,想方法把特征做成矩阵形式,也可以利用CNN做分类。这里我写了个试验性程序来证明CNN比传统的多层感知机要优秀些。

1. 数据描述:RNA亚细胞定位特征数据。有14489个样本,34维特征,42维标签。
2. 程序试验:数据直接进入CNN肯定过拟合,于是我将每个特征复制34份形成34*34矩阵(这样做是不对的,只是先跑通CNN)。训练集:验证集:测试集=8:1:1,然后接入普通的卷积网络,用测试集看最终结果。
3. 运行过程:https://github.com/ShixiangWan/i ... ics/mxnet-bio.ipynb
4. 源码及数据:https://github.com/ShixiangWan/i ... ster/Bioinformatics
5. 结果描述:准确率96.5%,这个计算方式是14489*0.1*42=60858个测试样本标签中,有58723个分对的。推测:在更复杂的蛋白质二级结构预测方面,卷积神经网络可能有着更好的效果。


程序运行需要(131全都有):
1. MXNet环境
2. Python 2.7环境,numpy包,jupyter包


-----------  2017年4月11日 更新 -----------

今天突然明白了为什么我们序列预测的值都一样了。因为我们的卷积网络全连接前面的输出值就已经基本一样了,那么预测值一样就是肯定的。那么为什么卷积网络全连接前面的输出值基本一样呢?因为我们必须保证卷积的矩阵具有实际的局部数字意义,这也是卷积网络更擅长图片的原因。


其中,σ是激活函数,如sigmod;b是共享偏置,w是共享权重,a是矩阵元素。这即是输入层到隐含层的feature map。卷积矩阵需要有局部数字意义,激活函数才能发挥作用,卷积网络输出值才会有分类效果。黑白图片表示成01矩阵,彩色图片表示成3通道RGB矩阵,它们会形成规范的、有实际局部数字意义的矩阵,如手写数字图片矩阵:



上面矩阵,很明显能看出矩阵具有局部意义,代表手写数字2,这个局部特征能确保sigmod激活函数能够对特征进行正常的赋权重。再看我们随机构造的特征:



上面矩阵几乎让人摸不到头脑,寻找其中的抽象特征也是几乎不可能。而使用序列构造出的特征也没有任何二维局部意义。各个序列长度不同甚至相差巨大,还要有缺省值处理(大量补零等措施)。假设序列样本长度在100~10000,对于很多较短的序列要补充非常多的0且无局部意义,这些操作进一步使得激活函数丧失作用。最后在多次卷积后,每个样本的输出特征几乎一样。

参考资料:http://neuralnetworksanddeeplearning.com/chap6.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2017-3-14 21:18:37 | 只看该作者
赞啊,之前那个RNA亚细胞定位效果不好的数据集可以试试啊

另外,蛋白质序列转化成矩阵的代码邢鹏威有。
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2017-3-14 21:24:46 | 只看该作者
zouquan 发表于 2017-3-14 21:18
赞啊,之前那个RNA亚细胞定位效果不好的数据集可以试试啊

另外,蛋白质序列转化成矩阵的代码邢鹏威有。

回老师,这个就是那个RNA亚细胞定位数据集,效果竟然这么好,我再分析分析这是为啥。
回复 支持 反对

使用道具 举报

地板
发表于 2017-3-14 22:45:09 | 只看该作者
shixiang 发表于 2017-3-14 21:24
回老师,这个就是那个RNA亚细胞定位数据集,效果竟然这么好,我再分析分析这是为啥。

你用的是CD-HIT之前的还是之后的?如果是之前的,我记得正常方法效果也好。
另外,我记得CD-HIT之后的二类分类(细胞核内,核外),之前效果也不好
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2017-3-14 23:34:31 | 只看该作者
zouquan 发表于 2017-3-14 22:45
你用的是CD-HIT之前的还是之后的?如果是之前的,我记得正常方法效果也好。
另外,我记得CD-HIT之后的二 ...

这是CD-HIT之后的数据,pseinone中的sc-general方法提取的特征。回头我试试鹏威那个转矩阵的代码效果怎样~
回复 支持 反对

使用道具 举报

6#
发表于 2017-3-15 01:09:56 | 只看该作者
shixiang 发表于 2017-3-14 23:34
这是CD-HIT之后的数据,pseinone中的sc-general方法提取的特征。回头我试试鹏威那个转矩阵的代码效果怎样 ...

深度学习还是需要提取特征?
我以为直接用序列就可以分类了呢。
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2017-3-15 10:55:58 | 只看该作者
zouquan 发表于 2017-3-15 01:09
深度学习还是需要提取特征?
我以为直接用序列就可以分类了呢。


对的,也要提取特征。自然语言处理里面,单词有word2vec等方法提取特征;图片里面可以用RGB值作特征。我感觉深度学习很适合处理特征层次很低、样本数上百万上千万的场景,所以尤其适合搞图像,但也有好多生物信息学应用。还有就是调参优化很困难,衍生的网络结构也特别丰富。如果能借鉴一些关于2016年最新的GAN、ResNET(CVPR 2016的最佳论文)这些思想,且能有不错的多标签分类提升,这样的工作还是蛮创新的,在谷歌学术上还没有生信相关工作出现。
回复 支持 反对

使用道具 举报

8#
发表于 2017-3-15 12:27:10 | 只看该作者
shixiang 发表于 2017-3-15 10:55
对的,也要提取特征。自然语言处理里面,单词有word2vec等方法提取特征;图片里面可以用RGB值作特征。 ...

首先,这个工作很赞啊。

有个疑问,你在统计准确率的时候,我看更多像是把它当作多类分类问题进行统计,我建议你可以输出absolute accuracy,这样接近多标签的分类结果。

另外,CNN好像有学习特征的功能,不知道能否把最后学习到的特征保存呢?
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2017-3-15 14:37:37 | 只看该作者
RockRabbit 发表于 2017-3-15 12:27
首先,这个工作很赞啊。

有个疑问,你在统计准确率的时候,我看更多像是把它当作多类分类问题进行统计 ...

应该是可以的,自编码,不过我还不太清楚机制,持续研究中,有新的成果再分享给大家~
回复 支持 反对

使用道具 举报

10#
发表于 2017-3-17 16:43:41 | 只看该作者
赞, 学习下快速实现的能力;
这里有别人整理的深度学习在生物信息学上应用的文章列表, 更新到2017-01, 里面有篇CNN + RNN 在蛋白质二级结构预测方面的应用(2016-04 | Protein Secondary Structure Prediction Using Cascaded Convolutional and Recurrent Neural Networks | Zhen Li and Yizhou Yu | Arxiv), 或许可以参考下。
https://github.com/gokceneraslan/awesome-deepbio
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-26 16:13 , Processed in 0.075946 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表