量子卷积神经网络QCNN,TensorFlow Quantum(TFQ)和近期量子计算的疑问总结和例子,David 9量子计算系列#2

人类使用工具的过程很有意思,他们用旧的“先验”去获取新“先验”,而不是满足于完善旧的“先验” — David 9

量子计算机和其它人类工具一样,只是帮助人们探索未见的新“先验”。因为第一期的量子计算QNN入门反响热烈,所以David打算在这里补充第二期。并回答一些前沿探索的关键性问题:

  • TFQ和Cirq的关系和架构

用一句话概括,TFQ(TensorFlow Quantum)是将CirqTensorFlow集成在一起的框架。TensorFlow是包装ml或深度学习算法的上层框架。而Cirq就更接近量子计算机设备操作,包括各种常见门逻辑线路(Circuits)设计,支持不同结构的量子设备(google的Xmon量子设备是网状qubits)。

本质上,TFQ模型的目的是把量子线路(Circuits)嵌入到普通深度学习(机器学习)模型中,让量子线路编码经典深度学习(机器学习)的信息(下图蓝框部分):

来自:https://ai.googleblog.com/2020/03/announcing-tensorflow-quantum-open.html

即,制定一些量子线路操作,并对输入量子的量子间“去纠缠”,然后就可以编码经典世界中的信息。详细了解可以看看我们第一期内容

  • NISQ和Cluster State 是什么意思?

NISQCluster State是目前量子计算领域的主流概念。

我们知道,所量子叠加态就是一个量子能在同一时间处于两种不同属性0和1的状态,而对于经典物理中,一个粒子只能处于一种状态,如要么左旋,要么右旋。所谓量子纠缠态,简单来说,就是满足一定条件的情况下一个量子的行为将会影响到另一个量子的状态。即其中一个量子被操作改变而发生状态变化时,比如进行量子观测时,一个量子被观测为左旋。则另一个量子其状态立即发生相应的状态变化。而两个量子之间不存在一定相同或者相反的绝对规则。因此两个被纠缠的粒子可以是状态相同,也可以是状态相反

叠加纠缠的普遍存在, 继续阅读量子卷积神经网络QCNN,TensorFlow Quantum(TFQ)和近期量子计算的疑问总结和例子,David 9量子计算系列#2

【神经网络之黑客攻防】简述攻破神经网络的那些方法,聊聊防范措施,David 9的灰帽子Hacking

前阵子Michael Kissner的神经网络Hacking教程似乎很火,现在David正好空下来聊一下神经网络的黑客攻防。看了一下目录都算简单易懂:

来自:https://arxiv.org/pdf/1911.07658.pdf

方法1,攻击神经网络权重weights

考虑一个简单的瞳孔虹膜安检系统模型:

来自:https://arxiv.org/pdf/1911.07658.pdf

前几层是特征提取层,后几层是比对匹配层。如果你的想冒充CEO的瞳孔通过安检,你就需要有和他匹配的虹膜。让我们试想这样一种场景:你可通过某种途径拿到并篡改这个模型(假设是一个HDF5文件)。那么事情就变的相当简单,你用类似hdfview的工具修改HDF5文件,最直接地修改最后一层全连接层权重w,这样你可以马上得到想要的输出:

缺点与防范

这种攻击过于粗暴,如果没有精心设计权重,很容易让对方察觉(模型异常)。另外,真实情况是很难有获得模型的并重写模型的机会。防范也比较简单,可以对模型文件做加密;可以限制模型“写”权限(防篡改);或者经常做模型更新和MD5校验。

方法2,神经网络后门攻击

这种攻击比方法1中“篡改权重”优雅一些。我们可以试图做到不修改原有神经网络的任何行为,仅仅加入自己的虹膜,让网络认为我的虹膜和CEO的瞳孔一致(嘿嘿,当然前提还是你可以篡改模型)。

有个小问题是,如果你没有瞳孔图像训练集,怎么重新训练模型再篡改呢? 继续阅读【神经网络之黑客攻防】简述攻破神经网络的那些方法,聊聊防范措施,David 9的灰帽子Hacking

给普通科研人员跑TensorFlow Models项目的一点建议,编译tf,谷歌Bazel,TensorFlow Slim和其他

TensorFlow Models项目是谷歌TensorFlow项目下存放大量官方SOTA模型论文模型实现的子项目,大量的科研学习可以从这里开始(每个论题模型都是科研机构各自维护的):

但要快速上手任意模型,对于普通科研人员并不容易(除非你同时是CS系或同时熟悉C和python编程等)。这里David就带大家绕过一些不必要的坑。

models/research下的迁移学习domain_adaptation项目为例NIPS 2016论文),缺少编程经验的朋友(或者只会python的朋友)如果按照introduction走,很快就傻眼了:

普通科研人员不会知道bazel是google的一个编译工具,也不知道slim是什么东西(TF-slim其实是TensorFlow Models项目中独立出来的通用库)。事实上,对于只需研究模型本身的研究人员,这些都可以绕过!对于上述红框中的命令你完全可以用下面命令替代:

# python download_and_convert_data.py -- --dataset_dir $DSN_DATA_DIR --dataset_name=mnist

Models子项目虽然用bazel管理,但本质上都是TF的python项目,你总能找到python主入口跑这个项目,而不是用bazel这种专业工具(谷歌内部喜欢用的工具)。同样,slim本质上也是一个python库,用python脚本跑程序就可以:

$ python download_and_convert_data.py \
    --dataset_name=flowers \
    --dataset_dir="${DATA_DIR}"

另外,路径出错也是常见错误,

Traceback (most recent call last):
  File "dsn_eval.py", line 28, in <module>
    from domain_adaptation.datasets import dataset_factory
ImportError: No module named domain_adaptation.datasets

如上错误很可能是domain_adaption这个文件夹路径没有找到而已,这时对于一些不熟悉linux命令行的朋友,建软链或加环境变量不是最佳选择,最直接的方法是修改代码,比如在代码中插入下面两行,就可以把目录上两级库也添加进来,解决问题: 继续阅读给普通科研人员跑TensorFlow Models项目的一点建议,编译tf,谷歌Bazel,TensorFlow Slim和其他