DSSMs: Deep Structured Semantic Models

Attention! 我的Dr.Sure项目正式上线了,主旨在分享学习Tensorflow以及DeepLearning中的一些想法。期间随时更新我的论文心得以及想法。 Github地址:https://github.com/wangqingbaidu/Dr.Sure CSDN地址:http://blog.csdn.net/wangqingbaidu 个人博客地址:http://www.wangqingbaidu.cn/ DSSMs: Deep Structured Semantic Models DSSM(Deep Structured Semantic Model):基于深度网络的语义模型,这篇论文的核心思想是把文本数据以及用户的点击历史记录映射到一个相同维度的语义空间,通过最大化两个空间的cosine相似度,最终达到信息检索的目的。 DSSM这篇论文是在13年被首次提出,14,15经过两年的发展,分别演化出了基于卷积网络的C-DSSM(Convolutional DSSM)、基于循环神经网络的R-DSSM(Recurrent DSSM)、针对不同信息来源的MV-DSSM(Multi-View DSSM)、最后还有一个专门针对Caption的DMSM(Deep Multimodal Similarity Model)。 注:C-DSSM在论文里面的模型名称叫CLSM(Convolutional Latent Semantic Model),但是为了前后的连贯性,Dr.Sure就私自改成了C-DSSM。 DSSM的设计初衷是为了做信息检索(IR,应用到搜索引擎),但是后来逐渐被演化到不同数据源的语义空间映射问题,包括但是不仅仅包括信息检索、图文匹配、Caption、Sent2Vec。 这几个相关工作都有Xiaodong He的工作,他在CVPR2015上做了一个主题报告,专门针对DSSM以及内容理解做了一个比较详细的阐述,详见PPT。他在slides里面highlight出来的一些问题,感觉相当有参考价值。 这个博客汇总了13年到15年5篇论文有关DSSM的相关工作,详细介绍DSSM相关算法的发展。 一、 DSSM: Deep Structured Semantic Models 从模型的名称中可以看出,这个模型是基于深度学习的算法,并且是将数据映射到一个语义空间的模型。所以相比于以往其它的语义模型来说,最大的优势就是引入了深度网络。 1. 相关Semantic Models a.) Latent Semantic Models 这些模型里面最常被提及的就是Latent Semantic Analysis(LSA)、Probabilistic LSA(PLSA)以及LDA等,这些都是基于无监督的模型,而且大部分是基于矩阵分析以及概率模型的基础建立而来。对于不同单词的相同语义不能很好的建模。这里引用He博士在slides中的一个例子: Minnesota became a state on? When was the state Minnesota created? 这个例子只有Minnesota state关键词是共享的,句式包括其他的单词和句式都不相同,这样的数据放到传统的语义模型中很可能不会被映射到一个相同的语义空间,然而对于理解来说,这两句话的语义是完全相同的。 b.) Auto Encoder Decoder 前面基于矩阵分析的模型存在最大的问题就是算法为无监督的,虽然这些算法具有很强的鲁棒性,但是真是的应用场景中,每个任务的目标函数各不相同,这就好像用一个瑞士军刀削一个苹果,反而不如一个更合适的水果刀。 Auto encoder decoder的提出就是想解决上面的一些问题,使用深度网络,引入监督信息,通过encoder编码输入数据,映射到一个语义空间,然后在用decoder还原成原始数据。 其网络结构如下:

比特币跌破7000后,币圈大佬老猫给我的8条投资忠告

2017年12月8日,比特币的价格在几个连续上涨后,逼近20000美元大关。 时隔59天后,2018年2月5日,比特币价格跌破7000美元,较记录高位腰斩。 不到两个月的时间,比特币的价格,带着众多投资者坐了一趟“过山车”。 即便这样,也挡不住越来越多的人参与进来的热情。没有人愿意错过一夜暴富的机会。于是,一批一批的“小白”,前赴后继地奔向数字货币战场,但结果却不容乐观。因为其中绝大部分都逃不过沦为”韭菜“,被收割的命运。 这篇文章,不是奚落那些被“割”的“韭菜”,我非常理解新人们的焦虑和不甘;也不是为任何一个项目方和平台洗地,行业的发展需要理性,如果在市场波涛中翻滚沉浮的“韭菜”们,能从以下的文字中,获得一些帮助,能更加理性的思考自己的投资行为,我也就满足了。 一、相信这是一个长期多赢市场 我多次在公开场合中讲过,我在2013年花六千多块钱买的20个比特币,至今还在手里。 这不是运气,也不是什么忘记了然后突然想起来的,而是真真切切的就是看着价格起起落落而一直拿在手里,没有过任何抛售的念想,哪怕现在已经超过200倍的收益,我依然没有考虑在某个价位卖出的想法,在比特币这件事情上,我彻底放弃了任何做波段的想法。 原因只有一个,我相信区块链技术的发展无法抵挡,而比特币作为区块链资产市场的基础货币,将会经历一个超长的大牛市,所以,不管它如何涨跌,我都找不到抛售的理由,只要它作为区块链资产市场基础货币的基本面不改变,我就会一直持有。 如果想参与这个市场,必须有一个理由,这个理由应该强大到和我绝不抛售比特币的理由一样强大,而我的理由就是:区块链投资市场将是一个长期多赢市场。 赌博也是一个市场,它是一个负和市场,因为赌场在抽水,赌徒们钱是在逐渐减少的; 股市也是一个市场,它是一个(不确定)市场,譬如某国市场和某国市场就不一样,因为一个是价值发现的市场,而一个纯粹是为XX筹款的市场; 但区块链资产市场却是一个长期多赢市场,因为有越来越多的区块链资产的价值发现会伴随着整个区块链技术对世界的改变而发生,尤其在这个市场去X国化后,整个市场的变成了更加纯粹的市场,不确定性大大减少。 请注意,长期多赢市场只意味着机会更多,赚钱的几率更大,但绝不是随便怎么玩都赚钱,如果你一意孤行追涨杀跌,再好的市场你也不该来参加。 二、不要迷信任何大V 这件事如此重要,以至于我必须要在这里再三强调。 任何所谓的大V,都是一个普通人,就算经验再丰富,也不见得所有事都能判断正确,更何况,如果你只是根据他的只言片语进行投资,那本质上就是对自己的资产不负责任。更何况,有些大V出尔反尔,若说他对你的影响不夹带私货,我才不信。 请记住,你听大V的,亏了钱他不会补偿你。 任何大V对项目的站台,只能证明他和项目方认识,其他什么都不能说明。 如果这个大V还劝你买买买,将来一定会涨到多少,那一定是收了项目方的钱了,你要真信了,那只能是猪油蒙了心。 不要迷信任何大V,包括本猫,独立思考才是盈利的基础。 三、不要想赚到市场中每一次波动 “韭菜”也分三六九等,最辛苦的韭菜,特征非常明显,钱不多,却不愿意放过市场中的任何一次波动和机会,最好能把每个波动都能玩上一个低买高卖,为此可以 36 小时不睡觉,72 小时不闭眼,这全球 24 小时不间断的交易,把他们折磨的夜不能寐,日不能食。 2017年上半年我参与编织的 GBI 指数现在已经 15000 点了,2017年的1月1日这个指数才1000点,如果做好配置,什么都不做,甚至不参与任何一次 IXO,到现在应该是资产上涨 15 倍了,请问,辛辛苦苦追波段的你,资产增长跑赢指数了么? 弱水三千,只取一瓢,做你看的懂的投资,抓住一波大的机会,足以改变你对这个市场的理解,有一个规律在这个市场被反复验证:独立研究,低频交易,胜算更大。而一旦建立了正确的投资理念,只要不加杠杆,短期的盈亏一点都不重要,三天做个波段和三个月才关注一次仓位的人,肯定是后者赢。 (备注 :GBI指数可以在 inblockchain.com 上看到,也可以搜索微信小程序“区块链全球指数”) 四、投资前先问自己十几个为什么 你为什么投这个项目? 这个项目的负责人靠谱吗? 他有什么历史成绩能证明他的能力? 这个项目的逻辑合理吗? 真的需要区块链技术来解决吗? 这个区块链的速度和吞吐量能满足这个项目的需求吗? 这个项目的市场有多大? 这个项目推进的难度有多大? 为什么这个项目要找你拿钱? 你为什么会有机会投这个项目? …… 以上是我写这篇文章时候随手写的问题。 其实可以问的问题更多,如果你去参与了某个项目的投资,只是看看 K 线,甚至连K线都没看,就是看看群里的氛围,你就去投钱了,你的钱是偷来的么? 做你看得懂的投资,如果知识不够,就去补课,这个世界真没有免费的午餐,要不,即使你侥幸投资了好的品种,也一定拿不住。 五、白马黑马的差异化投资 任何一个市场,都有白马和黑马的说法。 区块链资产市场也一样,特别的是,区块链资产市场的白马如此显而易见,很多新人却视而不见。 比特币本身是最大的白马,但多少人看着他一路奔跑,却始终没上车。 以太坊曾经也是大白马,从起点骑到胜景的人却寥寥无几。 如果你想投资这个市场,一定要想想哪个品种会是当前和未来的大白马。 对白马视而不见,不是色弱,而是希望获得更高的暴利的贪婪左右了心性。 爱在黑夜里寻找黑马,不是因为有明亮的眼睛,只是因为盗墓笔记看多了想一夜暴富。 很自豪的说,我没有错过大的白马机会,这是我投资成果的主要构成。 我也骑上过疯狂的黑马,但在我的营收成果中,比例竟然不值一提。 六、想作死就All-in

推荐系统中特征工程的自动化——Deep Crossing模型

本文是(2016)Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features笔记 主题:在搜索页面推荐广告 维度:用户、广告商、搜索平台 目标:展示用户最想看的广告 概念: query:搜索语句 Campaign:广告主在一段明确的期间里(如一年),推出一系列拥有共同主题或讯息的广告,以期建立广告讯息的累积效果,塑造品牌与企业一致的形象,并给予目标受众持续而深刻的刺激与冲击。 特征: 分类变量——one-hot vector campaign id——分成一组特征对: a)CampaignID:点击Top10000的id做one-hot,(0,0,0,,,0)代表所有剩下的id b)CampainIDCount:campaign的统计量,比如特征值(be referred to as counting feature)。 交叉特征:deep crossing 不使用交叉特征。 模型结构: feature#2:低于256维,跳过embedding层 其他feature:进入embedding层(单层ReLU) embedding层的输入+低维变量,合并为k维特征进入stacking层。 residual层: 残差层由如下的残差单元组成,它们是由图像识别模型Residual Net中的残差单元改造而来: 残差单元的特殊之处在于,输入会在经过两个ReLU层后,加上它本身。也就是说,F函数拟合的是输出与输入的残差值。 模型对比:作者尝试过深层神经网络的模型,但是效果并没有好于2-3层的神经网络。deep cross是可以轻易优于2-3层神经网络的模型。

ISP算法:镜头阴影矫正

镜头阴影矫正(Lens Shading Correction)是为了解决由于lens的光学特性,由于镜头对于光学折射不均匀导致的镜头周围出现阴影的情况。 lens shading分为两种luma shading(亮度阴影)和color shading(色彩偏差)。 luma shading:由于Lens的光学特性,Sensor影像区的边缘区域接收的光强比中心小,所造成的中心和四角亮度不一致的现象。镜头本身就是一个凸透镜,由于凸透镜原理,中心的感光必然比周边多。如图所示: color shading: 由于各种颜色的波长不同,经过了透镜的折射,折射的角度也不一样,因此会造成color shading的现象,这也是为什么太阳光经过三棱镜可以呈现彩虹的效果。如图所示: 矫正方法: 任何Shading都可以通过当前像素乘以增益gain的方式进行矫正。比较常见的两种思路: <1> 半径矫正(radial shading correct) <2> 网格矫正(mesh shading correct) 这两种矫正的gain都是基于中心像素灰度值和边缘像素灰度值以及矫正像素位置到中心像素位置的距离共同决定。 参考资料: https://www.mm-sol.com/products/computational-camera/automatic-lens-shading-correction.html http://blog.csdn.net/u013531497/article/details/39082415 https://wenku.baidu.com/view/2b20c21ffad6195f312ba6df.html http://blog.csdn.net/xiaoyouck/article/details/77206505 http://blog.csdn.net/qq377801394/article/details/72472034

使用T4M的一些坑

最近需要处理场景地形,一开始是将原地形模型转换成Terrain系统,结果在移动端测试的时候发现性能爆掉了,不能忍。于是转到使用T4M插件上。虽然教程比较全面,但使用的时候还是遇到了一些坑。 使用T4M转换后的模型出现异常面,无法在异常面上绘制纹理。尝试了合并顶点、检查破面、检查法线/切线方向、检查UV、重新导出OBJ再导入皆不行。按照群里的说法,将子层级全选 detach也不行。最终通过删除有问题的面片再重新补上才解决,怀疑可能和顶点ID有关。 绘制纹理时总提示文件格式不对,一开始以为是用的贴图有问题,最后发现是T4M生成的地形mask格式被Unity自动压缩了,解决办法就是将地形mask处理成非压缩格式。 使用后感觉T4M还不错,不足的是它处理融合时用的是简单的融合,如果能结合Advanced Terrain Texture Splatting效果会更好。后续试试在T4M基础上实现这样效果,或者重新做个地形系统。

Eclipse J2EE下的Project Explorer字体大小设置

找到eclipse文件,依次打开eclipse\plugins\org.eclipse.ui.themes_1.1.0.v20150511-0913\css。可以看到有很多的.CSS文件 对应你的系统 ,win7还是mac,如果是win10的话直接修改e4-dark_win.css文件,打开e4-dark_win.css在最后面添加.MPart Tree{ font-size:10px;}。

浅谈人工神经网络

试想某一天,程序员们想开发一个简单的分类器,用来把各种各样的动物图片中以猫为主题的挑拣出来。传统思路是提取图片的几何特征,看是否与猫相符。可惜的是这十分困难,在不同角度,光暗条件,或是猫品种不同时,猫的几何特征很难统一描述,何况如果是更为复杂的图片,猫可能躲在树后只露出半边脸。 于是程序员们决定换个思路。 学过大计基的我们知道,图片由像素点组成,每个像素点由几个字节的数据表示其颜色与亮度。因此图片在计算机里就是一串数据。猫的几何特征在数据上可能会有一些规律,然而人类很难发现它们。因此偷懒的程序员们决定让计算机自己去找。 1,神经元 为了了解人工神经网络,我们先了解一下它的组成单位——神经元。 人工神经网络是一个模仿活体生物系统中神经网络的模型。因此我们需要先回忆一下生物神经元的特性。根据高中知识,一个神经元大概长这样: 一个生物神经元是单个细胞,具有一些被称为树突的输入触角和一个被称为轴突的输出触角。经由一个细胞的轴突传递的信号反映了细胞是处于抑制状态还是兴奋状态,而这种状态由细胞的树突接收到的信号的组合来决定。 于是人们模仿这个特性开发了人工神经网络的神经元。 人工神经网络中的一个神经元是模仿对生物神经元这种基本了解的一个软件单元,根据其有效输入是否超过了一个给定的值——这个值称为神经元的阈值——产生0或1作为输出。如图所示,这个有效输入是许多实际输入的一个加权和。图中,神经元由椭圆表示,两个神经元之间的连接由箭头表示。其他神经元(记为 v1,v2和v3 )的输出用作所描述的神经元的输入。除了这些值,每个连接都与权(记为 w1,w2和w3 )相关联。神经元把每个输入值与相应的权值相乘,再把这些乘积相加形成有效输入( w1v1+w2v2+w3v3 )。如果这个和超过该神经元的阈值,那么这个神经元就产生一个输出值1(模拟神经元的兴奋状态);否则就产生一个输出0(模拟神经元的抑制状态)。 有了神经元,接下来就该组建人工神经网络了。 为了方便表示,我们先规定如下的符号: 箭头上写的是权值,圆形中央写的是阈值,顺带一提的是,权值可正可负,说明输入对神经元的作用可以是兴奋也可以是抑制。 回到开头举的例子,我们可以设定,神经元输出1,代表这张图是猫,输出0则代表不是。 然而问题是,权值和阈值是怎么确定的呢? 2,训练人工神经网络 人工神经网络的一个重要特征是,它们不再是通过传统意义上的编程来实现,而是通过训练来实现。也就是说,权值和阈值不是由程序员决定的,而是在训练过程中人工神经网络自行调整的。训练过程以监督训练为主,以文章开头的例子为例,就是程序员事先把图片集里以猫为主题的图片人工标注为1,其他标注为0,然后都输入人工神经网络中,让人工神经网络把自己得到的结果(1或0)与人工标注的比较,如果不符,则稍微修改权值和阈值使其接近人的决定。该训练是一个反复的过程,需要大量的数据与训练时间,还需要程序员们监督管理,因此有些人称之为“炼丹”。 值得一提的是,正因为人工神经网络是由训练产生的,它成为了一个黑箱——我们不知道原理,只知道结果很正确。事实上没有人能说清权值和阈值为什么会设置成这样,只知道结果正确率符合要求。 然而,人脑大约包含 1011 个神经元,每个神经元约有 104 个突触,事实上一个生物神经元的树突多得更像一个纤维网。因此显而易见,如果仅凭这几个神经元,无论怎么训练,都是几乎不可能得到正确结果的。于是,程序员们决定组建深度神经网络。 3,深度人工神经网络 顾名思义,深度神经网络分了很多层,现在的技术可以支持10层甚至100层以上。 而层数一多起来,每层负责的部分不同,准确性会大大提高。 先贴引用论文信息: Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (pp. 1097-1105). 2012年多伦多大学的Krizhevsky等人构造了一个超大型卷积神经网络,有9层,共65万个神经元,6千万个参数。网络的输入是图片,输出是1000个类,比如小虫、美洲豹、救生船等等。 第一层神经元主要负责识别颜色和简单纹理 第二层的一些神经元可以识别更加细化的纹理,比如布纹、刻度、叶纹。 第三层的一些神经元负责感受黑夜里的黄色烛光、鸡蛋黄、高光。 第四层的一些神经元负责识别萌狗的脸、七星瓢虫和一堆圆形物体的存在。 第五层的一些神经元可以识别出花、圆形屋顶、键盘、鸟、黑眼圈动物。 尽管一个或一层神经元的作用极其有限,但65万个神经元的9层人工神经网络发展出的能力令人印象深刻。 到这里为止,似乎只是“输入-处理-输出”的单向网络,但改进后的人工神经网络可以完成更像人类的任务(至少是从结果上),比如说联想和记忆。 4,联想记忆 联想记忆——提取与手头信息相关的信息,是人脑的强大功能。构建具有这种联想记忆能力的机器是许多年来的一个研究目标,现在人工神经网络是达成途径之一。 设想我们现在有一个没有输入与输出的人工神经网络,且每一条直线都表示双向连接,直线上为权值,圆形内为阈值。 假设我们用1表示活跃状态,0表示抑制状态,任何时刻整个网络的状态都能表示为1和0的布局。 如果我们将网络最右边的两个神经元初始化为抑制状态,其他初始化为兴奋状态,则会有如下的过程:

Ubuntu 16.04如何使用Samba服务器

首发平台:微信公众号baiwenkeji 对于Windows与Ubuntu之间的数据传输,我们习惯于使用FTP工具,不过还是有学员问到samba服务器搭建和使用的问题,这便是本文的来由。 Ubuntu版本:ARM裸机1期加强版配套的Ubuntu16.04 1.简介 samba是一个标准的套件,用于Windows和Linux、unix间的文件传输。官网:https://www.samba.org/ 2.安装samba [email protected]:~$ sudo apt-get install samba -y 3.修改配置文件 我发现自带的Ubuntu中安装的vim是精简版,很多按键都异常,所以先安装完整版的vim: [email protected]:~$ sudo apt-get install vim -y 然后使用vi修改smb配置文件 [email protected]:~$ sudo vi /etc/samba/smb.conf 在文件末尾追加以下内容: [samba] path = /work available = yes valid users = book writeable = yes 解释: [samba] 注释内容,可以随便写 path 用来指定要共享的目录 available 该目录是否有效 valid users 指定谁可以访问,不指定则所有人都可访问 writeable 是否可写 4.添加samba用户,并输入密码 [email protected]:~$ sudo smbpasswd -a book 5.重启samba服务器 [email protected]:~$ sudo service smbd restart

ionic的组件components

详情参考https://ionicframework.com/docs/components/ Action Sheets 动作表 操作表单从设备屏幕底部向上滑动,并显示一组选项,可以确认或取消操作。行动表有时可以用来作为菜单的替代,但是,他们不应该用于导航。 操作表总是显示在页面上的任何其他组件之上,并且必须被解雇才能与底层内容交互。当它被触发时,页面的其余部分会变暗,以便更多地关注“操作表”选项。 import { ActionSheetController } from 'ionic-angular'; export class MyPage { constructor(public actionSheetCtrl: ActionSheetController) { } presentActionSheet() { let actionSheet = this.actionSheetCtrl.create({ title: 'Modify your album', buttons: [ { text: 'Destructive', role: 'destructive', handler: () => { console.log('Destructive clicked'); } },{ text: 'Archive', handler: () => { console.log('Archive clicked'); } },{ text: 'Cancel', role: 'cancel', handler: () => { console.log('Cancel clicked'); } } ] }); actionSheet.

图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法

图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法 看到一篇博客介绍基于多尺度的图像的细节提升算法,其参考论文《Dark image enhancement based onpairwise target contrast and multi-scale detail boosting》,下图是该论文的核心算法过程。然后自己在Matlab和OpenCV实现了该算法,最终实现的效果还是不错的,可以增强图像的细节部分。 论文的核心算法过程: 论文的核心思想类似于Retinex,使用了三个尺度的高斯模糊,再和原图做减法,获得不同程度的细节信息,然后通过一定的组合方式把这些细节信息融合到原图中,从而得到加强原图信息的能力:请参考这一篇博客介绍:http://www.cnblogs.com/Imageshop/p/7895008.html,该博客给出了SSE的实现过程。 算法实现很容易,下面,我给出本人的OpenCV和Matlab实现方法: OpenCV实现方法: #include #include #include using namespace std; using namespace cv; cv::Mat multiScaleSharpen(cv::Mat Src, int Radius) { int rows = Src.rows; int cols = Src.cols; int cha = Src.channels(); cv::Mat B1, B2, B3; GaussianBlur(Src, B1, Size(Radius, Radius), 1.0, 1.0);//高斯模糊 GaussianBlur(Src, B2, Size(Radius*2-1, Radius*2-1), 2.0, 2.0); GaussianBlur(Src, B3, Size(Radius*4-1, Radius*4-1), 4.0, 4.0); double w1 = 0.