0%

今天在知乎看见一个讨论L1正则函数, ReLU激活函数的可导性的问题?记录一下理解

image-20220510152203446

一般情况下,深度学习在反向传播时需要对各层的函数求导数,从而向前传播梯度,那么是不是在一个神经网络中,是不是要求所有的计算op都是连续可导的呢?很明显不是这样的,例如ReLU, 很明显在0这一点处也不可导,那梯度就没有了吗,其实一般的训练框架在这种情况下,会对0这一点的梯度分配一个所谓的“sub-gradient”次梯度来代表无法求导的这个点的梯度。

image-20220510152600342

image-20220510152614310

image-20220510153331838

例如可以将0处的导数置为0。

1. ResNest

image-20220509105429462

paper: https://hangzhang.org/files/resnest.pdf

作者讲解:https://www.bilibili.com/video/BV1PV411k7ch

ResNeSt提出了Split-Attention Block模块, 其考虑到组卷积降低计算量、以及通道注意力策略提升跨通道的相互作用,可以理解为ResNeXt和SKNet的结合版。在图像分类,目标检测,目标分割等众多Backbone上有了明显提升。

image-20220509110437806

阅读全文 »

1. SKNet

paper: https://arxiv.org/pdf/1903.06586.pdf

image-20220507180013773

“We propose a dynamic selection mechanism in CNNs that allows each neuron to adaptively adjust its receptive field size based on multiple scales of input information.”

image-20220507180640394

“从ResNet到ResNeXt,> 1 kernel的计算量从原来52.9%的占比下降到了6.6%,几乎下降了一个数量级,但却让ResNeXt的分类性能提升了” —作者@李翔

SKNet考虑到这一现象,思考了几个点:

  1. 在ResNext结构上少牺牲一些计算量,是否能进一步提升网络性能?
  2. 对应于CNN网络,一般来说对于特定任务特定模型,卷积核大小是确定的,那么是否可以构建一种模型,使网络可以根据输入信息的多个尺度自适应的调节接受域大小呢?

基于此,结合了分组卷积和SENet提出了Selective Kernel。

image-20220507181317370

阅读全文 »

1. SENet

CNN网络架构的发展,使得卷积运算从多个维度去进行特征融合, 从深度depth,宽度等维度去聚合不同感受野的特征,所以基本上在SENet提出前, 通用网络架构都是默认聚合所有channel的信息, 即使MobileNet中的Group Conv 和 Depthwise Separable Conv对channel进行了分组等操作,也只是出于对网络加速的诉求。SENet关注了channel之间的关系,以期使模型能够自动学习出不同channel的重要性。

image-20220507161358415

2. Squeeze and Excitation模块

image-20220507155723423

squeeze: global average pooling

excitation: FC(降维) + FC(升维) + sigmoid(激活0~1)

模块的作用就是学习到每个通道的权重系数。

阅读全文 »

1. Res2Net简析

paper: https://arxiv.org/pdf/1904.01169.pdf

image-20220507135929679

Res2Net提出的契机, 其认为网络提取多尺度特征的能力是非常重要的,与其他网络不同的是,Res2Net没有在layer-wise这个层面改进,而是在更细粒度的层面改进了网络模型,其改进了Residual Block内部,以期能够提升该模块提取多尺度特征的能力。

  • objects may appear with different sizes in a single image, e.g., the sofa and cup are of different sizes.
  • the essential contextual information of an object may occupy a much larger area than the object itself.
  • perceiving information from different scales is essential for understanding parts as well as objects for tasks such as fine-grained classification and semantic segmentation.

image-20220507140613917

上图(b)即为Res2Net提出的Block, 经过1x1卷积之后,特征图分成4(s)部分。x1不做处理,直接传到y1,等价于skip-connection;x2经过3x3卷积之后分为两条线路,一条继续向前传播给y2,另一条传到x3,这样第三条线路就获得了第二条线路的信息;第三条线路、第四条线路,以此类推。每条线路的通道数为n/s。这样拆分组合的方式使得经过该block之后的特征感受野更加丰富,包含了多种尺度的特征,使得整的网络能够有效提取全局特征和局部特征。Res2Net提出了尺度(s)这个超参数,论文实验论证了增加该参数相比其他维度(通道,深度,宽度)更加有效。

阅读全文 »

1. python代码的加密方式

(1)pyc

python解释器执行的过程中会首先生成.pyc文件,然后再解释执行.pyc文件中的内容。

./pyc是一个二进制的文件,不具备可读性,可以使用compileall库将py文件编译为pyc二进制文件。

现在反编译工具可以较为轻松的将pyc文件破解,安全性较差。

(2)代码混淆

代码混淆是一种常见的加密方式,其原理是让代码的可读性变差,例如删除注释,添加无意义代码,变量、函数、类进行重命名等。

常用的代码混淆的库是pyobfuscate。

(3)打包为exe

使用py2exe可以将python脚本打包为可以在windows上运行的文件。

(4)cpython加密

一般情况下,cpython可以用来提升python的性能,其实也可以作为加密的一种方式。

cpython可以将py文件编译为.c文件,再将.c文件编译为.so(linux)或者pyd(windows)文件。

阅读全文 »