赞
踩
【我的AI安全之路】以下内容适合于有web安全基础但对AI"一无所知"的师傅们
如果是有安全基础,想入门AI安全,可以看下以web安全为背景介绍AI安全的书:《Web安全之机器学习入门》和《Web安全之深度学习实战》,以及一本关于对抗样本的书:《AI安全之对抗样本入门》
【补充】以下均基于深度学习主流框架之一keras为例
深度学习主要包括训练和预测两个过程。
数据预处理就是把物理世界中的实物特征化,最终表示为多维向量的过程。
Eg:图片可以表示为多维向量,使用长度,宽度,信道数表示图片的形状。
分辨率为10×10的灰度图像→形状为[10,10,1]的向量
分辨率为10×10的RGB图像→形状为[10,10,3]的向量
完整的训练好的深度学习模型 = 对网络结构的描述(or对网络结构的定义) + 每层网络的具体参数
定义网络是的常用层包括一下几层
其中,keras框架中的常用层的函数包含在keras.layers.core
中
作用:用于构建一个全连接。
全连接结构包括:输入、求和、激活、权重矩阵、偏置、输出。(从此角度来说,训练的过程就是获得最优的权重矩阵和偏置的过程)
【补充知识点】
定义Dense层
keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
以上定义中重要的几个参数
units
:隐藏层节点数(空间的维数)
activation
:激活函数(详细见1.3.2 Activation层)
use_bias
:是否使用偏置
kernel_initializer='glorot_uniform'
: 核权重矩阵的初始值设定项
bias_initializer='zeros'
: 偏差向量的初始值设定项
kernel_regularizer=None
: 正则化函数应用于核权矩阵
bias_regularizer=None
: 应用于偏差向量的正则化函数
kernel_constraint=None
: 对权重矩阵约束
bias_constraint=None
: 对偏置向量约束
作用:对一个层的输出施加激活函数
补充:该层可以单独使用,也可以作为其它层的参数(例如做Dense层的参数)
激活函数
①relu
当输入小于0时为0,当输入大于0是为输入
函数公式为:
图像代码如下:
def relu(X): if x > 0: return x else: return 0 def func4(): x = np.arange(-5.0, 5.0, 0.02)#返回一个终点为5.0,起点为-5.0,固定步长为0.02的排列 y = [] for i in x: yi = relu(x) y.append(yi) plt.xlabel('x') #设置x轴的标签文本 plt.ylabel('y relu(x)') #设置y轴的标签文本 plt.title('relu') #设置图像标题 plt.plot(x, y) #展现变量的趋势变化。 plt.show() #画出图像
【补充知识点】
np.arange()
函数返回一个有终点和起点的固定步长的排列
参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数append()
函数表示在列表末尾添加新的对象
②leakyrelu
当输入小于0时乘以一个很小的系数,当输入大于0是为输入
图像代码如下:
def relu(X): if x > 0: return x else: return x * 0.1 def func4(): x = np.arange(-5.0, 5.0, 0.02)#返回一个终点为5.0,起点为-5.0,固定步长为0.02的排列 y = [] for i in x: yi = relu(x) y.append(yi) plt.xlabel('x') #设置x轴的标签文本 plt.ylabel('y leakyrelu(x)') #设置y轴的标签文本 plt.title('leakyrelu') #设置图像标题 plt.plot(x, y) #展现变量的趋势变化。 plt.show() #画出图像
③tanh
双切正切函数,取值范围为[-1,1]
函数公式为
图像代码如下
x = np.arange(-5.0, 5.0, 0.02)
y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
plt.xlabel('x')
plt.ylabel('y tanh(x)')
plt.title('tanh')
plt.plot(x, y)
plt.show()
④sigmoid
将一个实数映射到(0,1)区间,可用于做二分类
函数公式为
图像代码如下
x = np.arange(-5.0, 5.0, 0.02)
y = i / (1 + np.exp(-x))
plt.xlabel('x')
plt.ylabel('y sigmoid(x)')
plt.title('sigmoid')
plt.plot(x, y)
plt.show()
基本的model搭建
Eg:创建一个输入大小为784,节点数(空间维数)为32,激活函数为relu的全连接层的代码
model.add(Dense(32, activation='rule', input_shape=(784,)))
作用:为避免过拟合,在训练时随机选择一定的结点临时失效(识别图像是随机挡住一些像素不会影响图片的识别)
【补充知识点】
过拟合:包含参数过多,对已知数据预测的很好,对未知预测的很差(对预测过度严格)
定义Dropout层
teras.layers.core.Dropout(rate,noise_shape=None,seed=None)
其中rate表示临时失效的节点比例(经验值为0.2~0.4比较合适)
作用:将输入的向量按照一定的规则改变维度
定义Embedding层
keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
以上定义中重要的几个参数
input_dim
:输入的向量的维度
output_dim
:输出的向量的维度
embeddings_initializer
:初始化的方式,通常使用glorot_normal或者uniform
作用:将输入的维度按照指定模式进行重排
Permute层重排代码:
if K.image_dim_ordering() == 'tf':
model.add(Permute((2,3,1), input_shape=input_shape))
elif K.image_dim_ordering() == 'th':
model.add(Permute((1,2,3), input_shape=input_shape))
else:
raise RuntimeError('Unknoen image_dim_ordering.')
【补充知识点】
框架名称:TensorFlow
主要维护方:Google
支持的语言:C++/Python/Java/R 等
GitHub源码地址:https://github.com/tensorflow/tensorflow
框架名称:Keras
主要维护方:Google
支持的语言:Python/R
GitHub源码地址:https://github.com/keras-team/keras
框架名称:Caffe
主要维护方:BVLC
支持的语言:C++/Python/Matlab
GitHub源码地址:https://github.com/BVLC/caffe
框架名称:PyTorch
主要维护方:Facebook
支持的语言:C/C++/Python
GitHub源码地址:https://github.com/pytorch/pytorch
框架名称:Theano
主要维护方:UdeM
支持的语言:Python
GitHub源码地址:https://github.com/Theano/Theano
框架名称:CNTK
主要维护方:Microsoft
支持的语言:C++/Python/C#/.NET/Java/R
GitHub源码地址:https://github.com/Microsoft/CNTK
框架名称:MXNet
主要维护方:DMLC
支持的语言:C++/Python/R等
GitHub源码地址:https://github.com/apache/incubator-mxnet
框架名称:PaddlePaddle
主要维护方:Baidu
支持的语言:C++/Python
GitHub源码地址:https://github.com/PaddlePaddle/Paddle/
框架名称:Deeplearning4j
主要维护方:Eclipse
支持的语言:Java/Scala等
GitHub源码地址:https://github.com/eclipse/deeplearning4j
框架名称:ONNX
主要维护方:Microsoft/ Facebook
支持的语言:Python/R
GitHub源码地址:https://github.com/onnx/onnx
这里具体了解一下TensorFlow和Theano的区别:
TensorFlow图像保存的顺序是(width,height,channels)
Theano图像保存的顺序是(channels,width,height)
作用:将输入的shape转化为特定的shape
定义Reshape层
keras.layers.core.Reshape(target_shape)
以上定义中重要的几个参数
target_shape
为希望转换成的形状
Keras中常见的损失函数
mean_squared_error 或 mse (回归问题经常使用)
mean_absolute_error 或 mae (回归问题经常使用)
mean_absolute_percentage_error 或 mape
mean_squared_logarithmic_error 或 msle
squared_hinge
hinge
categorical_hinge
binary_crossentropy (二分类问题经常使用)
logcosh
categorical_crossentropy (多分类问题经常使用)
sparse_categorical_crossentrop
作用:提高模型的抗过拟合能力。
通常被加入到损失函数中。
从数学角度:用于度量向量中非零元素的个数
从对抗样本角度:指对抗样本相对原始图片,所修改像素的个数
度量两个向量间的差异,表示向量中非零元素的绝对值之和
从数学角度:向量元素的平方和再开方
从对抗样本角度:指对抗样本相对原始图片,所修改像素的变化量的平方和再开方
从数学角度:度量向量元素的最大值
从对抗样本角度:指对抗样本相对原始图片,所修改像素的变化量绝对值的最大值
本篇文章回忆了一下数学方面的内容:矩阵,向量,范式。(线性代数怪我没好好学,啥也不记得了)
最主要的是了解了深度学习的常规过程,对深度学习进一步的了解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。