AI安全之对抗样本入门
上QQ阅读APP看书,第一时间看更新

自序

这不是我第一次写序了,但是真拿起笔还是觉得挺难写的。记得我写第一本书时,女儿还在蹒跚学步,拿着我的书时还分不清书的前后正反,但是现在她已经在幼儿园学会做月饼了。据说现在人工智能的知识已经写入高中教材了,这方面我倒是对闺女比较有信心,至少在人工智能方面她启蒙得比较早。

机缘巧合,我负责了一个AI模型安全的开源项目AdvBoxhttps://github.com/baidu/AdvBox。虽然我之前接触过AI安全,但是主要集中在AI赋能传统安全的领域,简单讲就是我之前写的《Web安全之机器学习入门》这类书里介绍的如何将AI技术应用到传统安全领域。相对传统安全领域,AI模型的安全是一个陌生但更加有趣的领域。从简单的把猫变成狗,到稍微复杂点的用奇怪的“鸟叫虫鸣”就可以唤醒智能音箱、点外卖,再到更加酷炫的换脸和欺骗无人车,这都是对抗样本的典型应用。开发和运营AdvBox是我工作的一部分,也是我生活的一部分,我写了个小脚本每天爬GitHub上的排名并发送邮件给我,每天早上我都会刷刷邮箱看一下最新排名。AdvBox的关注数也从零一直慢慢爬到业内关注的一个排名。为了更好地运营AdvBox,我组建了QQ群和微信群,在回答用户问题的过程中,我发现其实很多问题非常基础:从TensorFlow/PyTorch的使用到深度学习的基础知识,从对抗样本的基本原理到图像处理中的一些小技巧。于是我想到了可以写一本书来介绍这方面的基础知识。

很多人在网上抱怨,2018年是比较艰难的一年,我也有同样的感受。工作繁忙了许多,而且换了新环境,许多东西需要再去适应。这本书从构思到基本写完,花了将近一年的时间,几乎占据了我全部的休息时间,确实挺不容易。其实我也反思过几次,为啥不去做些轻车熟路的事,非要去折腾些BIG4的论文里介绍的东西,非要在一个新成果刚发布就可能要过时的赛道去追逐。如果非要找个理由的话,我个人的感受是:容易的事轮不到我,早已是千军万马过独木桥了;困难的事坚持做,没准就走下去了。

本书的定位是学习对抗样本的入门书籍,因此也简单介绍了相关领域的背景知识便于读者理解,使用的数据集和场景是比较典型的图像分类、目标识别等领域。第1章介绍了深度学习的基础知识,重点介绍了与对抗样本相关的梯度、优化器、反向传递等知识点。第2章介绍了如何搭建学习对抗样本的软硬件环境,虽然GPU不是必需的,但是使用GPU可以更加快速地验证你的想法。第3章概括介绍了常见的深度学习框架,从TensorFlow、Keras、PyTorch到MXNet。第4章介绍了图像处理领域的基础知识,这部分知识对于理解对抗样本领域的一些常见图像处理技巧非常有帮助。第5章介绍了常见的白盒攻击算法,从最基础的FGSM、DeepFool到经典的JSMA和CW。第6章介绍了常见的黑盒攻击算法。第7章介绍了对抗样本在目标识别领域的应用。第8章介绍了对抗样本的常见抵御算法,与对抗样本一样,抵御对抗样本的技术也非常有趣。第9章介绍了常见的对抗样本工具以及如何搭建NIPS 2017对抗防御环境和轻量级攻防对抗环境robust-ml,通过这章读者可以了解如何站在巨人的肩膀上,快速生成自己的对抗样本,进行攻防对抗。

本书适合人工智能领域的从业人员、大专院校计算机相关专业学生,而不仅仅是信息安全领域的学生和从业人员。因为对抗样本的知识对于人工智能领域的从业人员非常重要,伴随着人工智能的遍地开花和逐步落地,从智能驾驶到人脸支付,从智能家居到智能安防,人工智能从一个学术名词变成了真正影响大家生活的技术,直接关系到大家的人身安全、财产安全还有个人隐私。对抗样本带来的问题,也是传统安全技术几乎难以解决的。了解对抗样本的基本原理,对于人工智能领域的从业人员开发出更加安全的应用是非常有帮助的。

我要感谢家人对我的支持,本来工作就很忙,没有太多时间处理家务,写书以后更是侵占了我大量的休息时间,我的妻子无条件地承担起了全部家务,尤其是照料孩子。我还要感谢我的女儿,写书这段时间几乎没有时间陪她玩,我也想用这本书作为她的生日礼物。我还要感谢编辑吴怡对我的支持和鼓励,让我可以坚持把这本书写完。Lenx对于我写这本书帮助很大,他对AI安全的深刻理解,积极但又务实,让我在研究的道路上既信心满满又不至于过于狂热而迷失道路。还要感谢AdvBox团队以及在GitHub上给AdvBox提交过代码的同学们。

最后还要感谢各位业内好友对我的支持,以下排名不分先后:

马杰@百度安全、Lenx@百度安全、黄正@百度安全、包沉浮@百度安全、海棠姐@百度安全、Edward@百度安全、贾云瀚@百度安全、云鹏@百度无人车、施亮@顶象、Victor Fang@AnChain、谢忱@Freebuf、大路@天际友盟、郭伟@数字观星、周涛@阿里、姚志武@借贷宝、刘静@安天、高磊@阿里、尹毅@sobug、吴圣@58、康宇@新浪、幻泉@i春秋、田老师@阳光保险、ReadOnly@易宝支付、樊春亮@泰康、聂君@360、林伟@360、白教主@360、李滨@腾讯、张维垚@饿了吗、阿杜@优信、高磊@安巽科技、王延辉@平安、吕毅@人行、雷诚@武汉大学、鸟哥@阿里云、咸鱼@京东、梁知音@京东、小马哥@京东、张超@清华大学、徐恪@清华大学、李勇@清华大学、李琦@清华大学。我平时在FreeBuf专栏以及i春秋分享企业安全建设以及人工智能相关经验与最新话题,同时运营我的微信公众号“兜哥带你学安全”,欢迎大家关注并在线交流。

计算机是一门非常强调理论联系实践的学科,我经常在和读者交流时说:安全会议的PPT就像电影,浓缩、精彩、有趣;博客、公众号上的文章就像电视剧,有细节、有思路;技术书籍更像原著,系统、详细、原汁原味。但是就像看再多武侠小说也不一定真能耍出一招半式一样,真正掌握一门武艺还是要勤于练习。因此我在GitHub上也把书里提到的示例代码开源出来,读者可以根据情况一边修改一边验证自己的理解,对应的地址为:https://github.com/duoergun0729/adversarial_examples