朝着抵抗力最大的路径走-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

相关文章

如何提高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

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl