朝着抵抗力最大的路径走-Rank16-强化学习、黑盒攻击、Baseline-SecurityAI

本文主要是介绍朝着抵抗力最大的路径走-Rank16-强化学习、黑盒攻击、Baseline-SecurityAI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在最前面的话

朝着抵抗力最大的路径走

我也不是RL的专家,但我认为GAN是使用RL来解决生成建模问题的一种方式。GAN的不同之处在于,奖励函数对行为是完全已知和可微分的,奖励是非固定的,以及奖励是agent的策略的一个函数。但我认为GAN基本上可以说就是RL。

Ian Goodfellow(生成对抗网络之父)

基于上述原则,成绩不重要,我们进行了以下工作。

一、强化学习

在这里,我们把扰动图生成变成像素点级的一个游戏。
即现在有一个500*500围棋棋盘,请随机在格子中下棋子,系统将返回奖励或惩罚。
据此,引入强化学习的策略梯度算法(Policy Gradient)
简单来说,神经网络的输入是原始的状态信息,优化即在该状态下执行动作的回报,即Q函数,输出是该状态下执行动作的概率。训练完成之后,神经网络逼近的是最优Q函数。

Q(S, a)
# 其中s为状态,a为动作

![enter image description here](https://tianchi-public.oss-cn-hangzhou.aliyuncs.com/public/files/forum/159911192499792771599111924046.jpeg =500x)
以下示例:

(1) 定义参数

N = 500
T = N ** 2
base = np.array([0 for _ in range(T)])
ACTION_DIM = T, T

(2) 定义模型

model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(8, (3, 3), activation='relu', input_shape=(N, N, 1)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(16, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(16, (3, 3), activation='relu'),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(ACTION_DIM, activation="softmax"),
])
model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(0.01))
print(model.summary())

![net model](https://tianchi-public.oss-cn-hangzhou.aliyuncs.com/public/files/forum/159911919176667041599119189739.png =500x)

(3) 动作选择

def choose_action(s):prob = model.predict(np.array([s.reshape((N, N, 1))]))[0]return np.random.choice(len(prob), p=prob)

根据模型返回概率生成动作。

(4) 模型迭代

def train(records):s_batch = np.array([record[0] for record in records])a_batch = np.array([[1 if record[1] == i else 0 for i in range(ACTION_DIM)] for record in records])prob_batch = model.predict(s_batch) * a_batchr_batch = np.array([record[2]*10000 for record in records])model.fit(s_batch, prob_batch, sample_weight=r_batch, verbose=0)

根据每次结果迭代训练模型。

解释一下

model.fit(s_batch, prob_batch, sample_weight=r_batch, verbose=0)

在这里通过sample_weightloss加一个权重,进而改变损失函数(loss function),促使神经网络朝着累加期望大的方向优化。

(5) 奖励惩罚

最重要也是最困难的一步。需要定义出合适的奖励和惩罚函数,并给出限制条件。
也就是说游戏中,每画好一个点,都应该有奖励分数+10或者惩罚分数-10,并当所下棋子过多结束本轮游戏。

def sfun(arx):arr = cv.imread(f"{pdata0}/{idata}")_arr = arr.copy()for iarx in np.where(arx == 1)[0]:y_arx = iarx//Nx_arx = iarx%N_arr[y_arx-M:y_arx+M, x_arx-M:x_arx+M] = dataccv.imwrite(f"{pdatat}/_{idata}", _arr)# .....省略detectionst = do_detect(darknet_model, imgt, 0.5, 0.4, True)result_t1 = inference_detector(mmdet_model1, f"{pdatat}/_{idata}")result_t1 = np.concatenate(result_t1)# .....省略# 此处选择检测框概率作为奖励或惩罚关键sdetectionst = [np.sum([_[4]*100 for _ in detectionst]),np.sum([result_t1[_, 4]*100 for _ in range(len(result_t1)) if result_t1[_, 4] > show_score_thr]),]bb_score = [0 if np.isnan((_s0-_st)/_s0) or np.isinf((_s0-_st)/_s0) else (_s0-_st)/_s0 for _s0, _st in zip(sdetections0, sdetectionst)]bb_score = np.sum(_bb_score)rrr = bb_score * connected_domin_scorereturn total_area_rate > 0.02 or patch_number > 10, rrr

(6) 开始游戏

for i in range(episodes):s = basereplay_records = []while True:a = choose_action(s)next_s = s.reshape(T).copy()next_s[a] = 1done, r = sfun(next_s)replay_records.append((s.reshape((N, N, 1)), a, r))s = next_s# 回合结束if done:print('episode:', i, 'training')train(replay_records)print('episode:', i, 'trainend')break

(7) 结果展示

![enter image description here](https://tianchi-public.oss-cn-hangzhou.aliyuncs.com/public/files/forum/159912189937659791599121898030.png =500x)

(8) 过程总结

其实可以看到,训练过程还是跟传统梯度下降训练网络概念相对一致,有趣的地方在于游戏化状态化

以探索经验来说,强化学习的关键在于奖励,试想怎么走都没有分数的话,模型无论如何学不会最终结果。

启动机制设置,通过保存最优结果在下次重新开始游戏前进行预训练。

(9) TODO

  • <input disabled="" type="checkbox"> 游戏动作优化;
  • <input disabled="" type="checkbox"> 奖励或惩罚函数修正;
  • <input disabled="" type="checkbox"> 神经网络模型结构优化,对回合数据进行batch;
二、黑盒攻击

一般来说,当有方法能促使白盒模型1、白盒模型2得分最大后,黑盒模型得分甚低,攻击随机陷入局部最优。
并随着黑盒模型的破译,白盒模型分数将先下降,再与黑盒模型分数取得总分最大。是谓平衡。

所以我们始终觉得比赛中黑盒攻击虽然不是提分关键,却是比赛关键。

以下思路基于感觉光试是试不出来黑盒模型的,但只要能拟合出来相对同质的就OK。

其实是黑客思维,破译密码一样的概念。但这还比破译密码简单,因为会返回一定的分数,给你评估这次破译是否合理,误差多少。

(1) 通用方法

基于上述概念,我们需要一个通用方法Baseline,且方法得分不需过高,但各模型得分够均匀。
这里我们使用圆靶形贴图。
并通过fpoinnt函数来多次修改圆心。

查看本文全部内容,欢迎访问天池技术圈官方地址:

💪朝着抵抗力最大的路径走-Rank16-强化学习、黑盒攻击、Baseline-SecurityAIRound4_天池技术圈-阿里云天池

这篇关于朝着抵抗力最大的路径走-Rank16-强化学习、黑盒攻击、Baseline-SecurityAI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/909601

相关文章

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re