阅读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尽可能地都分开,那么一个简单的想法就是.
min⁡E=1δij2\min \bm{E} = \frac{1}{\delta_{ij}^2} minE=δij2​1​

泛化之
min⁡E=1δijs(s>0)\min \bm{E} = \frac{1}{\delta_{ij}^s}(s > 0) minE=δijs​1​(s>0)

或者开一个对数损失
min⁡E=−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)。除此之外,该问题还可以泛化到球面上,也就是
min⁡E=−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(π1​arccos<w^i​,w^j​>)

或者泛化一下
min⁡E=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=(π1​arccos<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就是比较糟糕了,向量虽然反向,但是共线,这显然是非常扯的事情了。

那么该怎么办呢?我简单翻译一下作者要表达的意图,就是
min⁡E=1δijs+1δ−ijs(s>0)\min \bm{E} = \frac{1}{\delta_{ij}^s} + \frac{1}{\delta_{-ij}^s} (s > 0) minE=δijs​1​+δ−ijs​1​(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​>

或者说
min⁡E=−log⁡δij−log⁡δ−ij\min \bm{E} = -\log \delta_{ij} -\log \delta_{-ij} minE=−logδij​−logδ−ij​

阅读Learning towards Minimum Hyperspherical Energy笔记相关推荐

  1. 《代码阅读方法与实践之读书笔记之一》

    <代码阅读方法与实践之读书笔记之一> 阅读代码是程序员的基本技能,同时也是软件开发.维护.演进.审查和重用过程中不可或缺的组成部分.<代码阅读方法与实践之读书笔记之一>这本书围 ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  3. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  4. 《代码阅读方法与实践》--读书笔记

    <代码阅读方法与实践>--读书笔记 第零章 综述 提高代码阅读的技能与技巧,进而从现有的优秀代码.算法.架构.设计中汲取营养,提高自身的开发与设计能力. 恐怕没有哪个伟大的小说家从未读过其 ...

  5. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. 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 ...

  8. 【李宏毅机器学习】Tips for Deep Learning(p14) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Recipe if Deep Learning Do not always blame Overfitting 针对不同的状况使用不同的方法 在训练集上 ...

  9. 吴恩达《Machine Learning》Jupyter Notebook 版笔记发布!图解、公式、习题都有了

    在我很早之前写过的文章<机器学习如何入门>中,就首推过吴恩达在 Coursera 上开设的<Machine Learning>课程.这门课最大的特点就是基本没有复杂的数学理论和 ...

最新文章

  1. 苦修月余,斩获bigo、腾讯offer,面经奉上!
  2. Python的零基础超详细讲解(第三天)-Python的基础语法
  3. 新网站如何推广 新建设的网站如何宣传
  4. python 美化输出 错误 警告等信息_OpenCV抑制、隐藏或禁用输出到屏幕的错误或警告消息...
  5. char类型的实参与const char类型的形参不兼容_C++干货系列——顶层const和底层const...
  6. Objective-c之NSCopying
  7. ubuntu 修改ssh登陆端口
  8. java重入锁,再探JAVA重入锁
  9. LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
  10. AI 安全在阿里业务中的实践,你了解吗?
  11. 防止U盘中病毒的小技巧
  12. 移植ubuntu14.04根文件系统至beaglebone开发板探索
  13. 马化腾:这一类中层干部,我最多忍你半年
  14. 解决Ubuntu远程连接mysql连不上的问题
  15. html中怎样设置邮件地址,我该如何为自己的域名设置邮箱地址呢?
  16. Linus Torvalds:最庆幸的是 30 年后,Linux 不是一个“死”项目
  17. 2021互联网大厂端午礼盒大盘点~
  18. MNN C++输入图片多通道
  19. github国内镜像
  20. STM32F105、107RB使用外部晶振8M时配置外设时钟为72M

热门文章

  1. 【打印机】argox入门
  2. zTree(二)树状图下拉框
  3. matlab中亚像素坐标位置,MATLAB+7.X生物信息工具箱的应用——序列比对(二)
  4. 时序数据取样方法_数据科学的抽样方法
  5. uni-app微信H5微信扫一扫支持安卓跟苹果
  6. 入职某厂安卓工程师的成长记录
  7. Oracle与SQLServer选型时不得不说的三个小差异
  8. Flow是如何解决背压问题的
  9. 计算机学科评估排名2020,2020哲学学科评估排名结果出炉及评估结果
  10. 大数据毕业设计 LSTM时间序列预测算法 - 股票预测 天气预测 房价预测