阅读Learning towards Minimum Hyperspherical Energy笔记
阅读Learning towards Minimum Hyperspherical Energy笔记
对于一些特征和权重,我们希望其结果不要都粘连到一起去,使得结果最后塌陷。那么有什么办法可以解决呢?
下面的NIPS2018的文章可以(https://arxiv.org/pdf/1805.09298.pdf)。
首先,我们定义一下这里的内积计算。首先向量先归一化
w^i=wi∣∣wi∣∣\hat{\bm{w}}_i = \frac{\bm{w}_i}{||\bm{w}_i||} w^i=∣∣wi∣∣wi
此时内积的取值范围是[−1,1][-1,1][−1,1]。然后定义一个骚操作
δij=2−2<w^i,w^j>\delta_{ij} = 2 - 2<\hat{\bm{w}}_i,\hat{\bm{w}}_j> δij=2−2<w^i,w^j>
这个数值δij∈[0,4]\delta_{ij} \in [0,4]δij∈[0,4].
我们有一个核心任务,就是把对应的w\bm{w}w尽可能地都分开,那么一个简单的想法就是.
minE=1δij2\min \bm{E} = \frac{1}{\delta_{ij}^2} minE=δij21
泛化之
minE=1δijs(s>0)\min \bm{E} = \frac{1}{\delta_{ij}^s}(s > 0) minE=δijs1(s>0)
或者开一个对数损失
minE=−logδij\min \bm{E} = -\log \delta_{ij} minE=−logδij
(这里和他论文中的写法有一点点小小的差异)。
来看看源代码是什么样子的。
def _add_thomson_constraint_final(self, filt, n_filt, power):filt = tf.reshape(filt, [-1, n_filt])filt_norm = tf.sqrt(tf.reduce_sum(filt*filt, [0], keep_dims=True) + 1e-4)norm_mat = tf.matmul(tf.transpose(filt_norm), filt_norm)inner_pro = tf.matmul(tf.transpose(filt), filt)inner_pro /= norm_matif power =='0':cross_terms = 2.0 - 2.0 * inner_profinal = -tf.log(cross_terms + tf.diag([1.0] * n_filt))final -= tf.matrix_band_part(final, -1, 0)cnt = n_filt * (n_filt - 1) / 2.0loss = 10 * tf.reduce_sum(final) / cntelif power =='2':cross_terms = (2.0 - 2.0 * inner_pro + tf.diag([1.0] * n_filt))final = tf.pow(cross_terms, tf.ones_like(cross_terms) * (-1))final -= tf.matrix_band_part(final, -1, 0)cnt = n_filt * (n_filt - 1) / 2.0loss = 10 * tf.reduce_sum(final) / cnt
看看函数图像
图上越往4函数数值越小,而4=2−(−2)4 = 2 - (-2)4=2−(−2)。除此之外,该问题还可以泛化到球面上,也就是
minE=−log(1πarccos<w^i,w^j>)\min \bm{E} = -\log \left(\frac{1}{\pi}\arccos <\hat{\bm{w}}_i,\hat{\bm{w}}_j>\right) minE=−log(π1arccos<w^i,w^j>)
或者泛化一下
minE=1(1πarccos<w^i,w^j>)s(s>0)\min \bm{E} = \frac{1}{\left(\frac{1}{\pi}\arccos <\hat{\bm{w}}_i,\hat{\bm{w}}_j>\right)^s} (s>0) minE=(π1arccos<w^i,w^j>)s1(s>0)
看看代码吧
def _add_thomson_constraint_final(self, filt, n_filt, power):filt = tf.reshape(filt, [-1, n_filt])filt_norm = tf.sqrt(tf.reduce_sum(filt*filt, [0], keep_dims=True) + 1e-4)norm_mat = tf.matmul(tf.transpose(filt_norm), filt_norm)inner_pro = tf.matmul(tf.transpose(filt), filt)inner_pro /= norm_matif power == 'a0':acos = tf.acos(inner_pro)/math.piacos += 1e-4final = -tf.log(acos)final -= tf.matrix_band_part(final, -1, 0)cnt = n_filt * (n_filt - 1) / 2.0loss = 10 * tf.reduce_sum(final) / cntelif power =='a1':acos = tf.acos(inner_pro)/math.piacos += 1e-4final = tf.pow(acos, tf.ones_like(acos) * (-1))final -= tf.matrix_band_part(final, -1, 0)cnt = n_filt * (n_filt - 1) / 2.0loss = 1 * tf.reduce_sum(final) / cnt
藉由这个函数图像,可以帮助看官更好地理解之。
最后解决最重要的历史遗留问题,就是可能的反向共线性问题。看图就知道了。
在原始的问题假设中,两个向量被拉开的。但是,拉开的最差的情况,就是内积为−1-1−1。−1-1−1就是比较糟糕了,向量虽然反向,但是共线,这显然是非常扯的事情了。
那么该怎么办呢?我简单翻译一下作者要表达的意图,就是
minE=1δijs+1δ−ijs(s>0)\min \bm{E} = \frac{1}{\delta_{ij}^s} + \frac{1}{\delta_{-ij}^s} (s > 0) minE=δijs1+δ−ijs1(s>0)
其中
δ−ij=2−2<−w^i,w^j>\delta_{-ij} = 2 - 2<\hat{-\bm{w}}_i,\hat{\bm{w}}_j> δ−ij=2−2<−w^i,w^j>
或者说
minE=−logδij−logδ−ij\min \bm{E} = -\log \delta_{ij} -\log \delta_{-ij} minE=−logδij−logδ−ij
阅读Learning towards Minimum Hyperspherical Energy笔记相关推荐
- 《代码阅读方法与实践之读书笔记之一》
<代码阅读方法与实践之读书笔记之一> 阅读代码是程序员的基本技能,同时也是软件开发.维护.演进.审查和重用过程中不可或缺的组成部分.<代码阅读方法与实践之读书笔记之一>这本书围 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- 《代码阅读方法与实践》--读书笔记
<代码阅读方法与实践>--读书笔记 第零章 综述 提高代码阅读的技能与技巧,进而从现有的优秀代码.算法.架构.设计中汲取营养,提高自身的开发与设计能力. 恐怕没有哪个伟大的小说家从未读过其 ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- PDGAN: A Novel Poisoning Defense Method in Federated Learning Using Generative Adversarial Network笔记
前言 论文 "PDGAN: A Novel Poisoning Defense Method in Federated Learning Using Generative Adversari ...
- 【李宏毅机器学习】Tips for Deep Learning(p14) 学习笔记
李宏毅机器学习学习笔记汇总 课程链接 文章目录 Recipe if Deep Learning Do not always blame Overfitting 针对不同的状况使用不同的方法 在训练集上 ...
- 吴恩达《Machine Learning》Jupyter Notebook 版笔记发布!图解、公式、习题都有了
在我很早之前写过的文章<机器学习如何入门>中,就首推过吴恩达在 Coursera 上开设的<Machine Learning>课程.这门课最大的特点就是基本没有复杂的数学理论和 ...
最新文章
- 苦修月余,斩获bigo、腾讯offer,面经奉上!
- Python的零基础超详细讲解(第三天)-Python的基础语法
- 新网站如何推广 新建设的网站如何宣传
- python 美化输出 错误 警告等信息_OpenCV抑制、隐藏或禁用输出到屏幕的错误或警告消息...
- char类型的实参与const char类型的形参不兼容_C++干货系列——顶层const和底层const...
- Objective-c之NSCopying
- ubuntu 修改ssh登陆端口
- java重入锁,再探JAVA重入锁
- LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
- AI 安全在阿里业务中的实践,你了解吗?
- 防止U盘中病毒的小技巧
- 移植ubuntu14.04根文件系统至beaglebone开发板探索
- 马化腾:这一类中层干部,我最多忍你半年
- 解决Ubuntu远程连接mysql连不上的问题
- html中怎样设置邮件地址,我该如何为自己的域名设置邮箱地址呢?
- Linus Torvalds:最庆幸的是 30 年后,Linux 不是一个“死”项目
- 2021互联网大厂端午礼盒大盘点~
- MNN C++输入图片多通道
- github国内镜像
- STM32F105、107RB使用外部晶振8M时配置外设时钟为72M