吴恩达深度学习——卷积神经网络的特殊应用

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习使用。

文章目录

人脸识别

相关定义

  • 人脸验证:

    • 输入:图像、姓名/ID。
    • 输出:判断输入图像是否为所声明的人。这是1:1的验证模式,即单一输入图像与单一声明身份进行比对。一对一对比,需要的正确率在99%。
  • 人脸识别:

    • 输入:获取一张输入图像。
    • 输出 :若数据库包含包含K个人,K = 100 。如果输入图像是数据库中K个人中的任何一个,则输出其ID;如果不是,则输出"未识别" 。一对K的识别,正确率需要很高,达到99.9%以上。

      人脸识别会遇到两个问题:
  • 录入的数据只有一份,也就是说,对于某个人脸,神经网络在训练的时候,只有一个数据,而不是很多的数据。

  • 当前的神经网络是针对当前的数据库而训练的,如果数据库中新加了内容,难道要重新训练神经网络?

Similarity函数

定义函数 d ( i m g 1 , i m g 2 ) d(img1, img2) d(img1,img2)表示两张图像之间的差异程度。

设定一个阈值 τ \tau τ,如果 d ( i m g 1 , i m g 2 ) ≤ τ d(img1, img2) \leq \tau d(img1,img2)≤τ,则判断两张图像为"same(相同)" ;如果 d ( i m g 1 , i m g 2 ) > τ d(img1, img2) > \tau d(img1,img2)>τ,则判断为"different(不同)" 。

对比的过程是输入的图片和整个数据库中的图片做比较。

使用Siamese网络实现函数d

输入第一张图像 x ( 1 ) x^{(1)} x(1),经过一系列的网络层,最终经过全连接层后得到图像的编码,记为 f ( x ( 1 ) ) f(x^{(1)}) f(x(1));继续输入第二张图象 x ( 2 ) x^{(2)} x(2),也经过相同的网络层得到编码,记为 f ( x ( 2 ) ) f(x^{(2)}) f(x(2))。

计算两个特征向量之差的L2范数的平方,即 d ( x ( 1 ) , x ( 2 ) ) = ∥ f ( x ( 1 ) ) − f ( x ( 2 ) ) ∥ 2 2 d(x^{(1)}, x^{(2)}) = \|f(x^{(1)}) - f(x^{(2)})\|_2^2 d(x(1),x(2))=∥f(x(1))−f(x(2))∥22 ,衡量两张输入图像的差异程度来判断是否相似。

因为这两个网络有相同的参数,计算出的编码都可以用于函数 d d d。这是因为神经网络的参数定义了编码函数 f ( x ( 1 ) ) f(x^{(1)}) f(x(1)),输入 x ( 1 ) x^{(1)} x(1)到函数中,就会输出 x ( i ) x^{(i)} x(i)的一个编码。

使用Triplet损失学习参数

想要通过学习神经网络的参数,来获得优质的人脸图片编码,可以定义一个Triplet损失函数然后应用梯度下降。

定义:

  • Anchor(锚样本,A) :作为参考的样本。

  • Positive(正样本,P) :与Anchor属于同一类别的样本,比如同一个人的不同照片。

  • Negative(负样本,N):与Anchor属于不同类别的样本,即不同人的照片。

计算:希望Anchor与Positive的特征向量距离 d ( A , P ) = ∥ f ( A ) − f ( P ) ∥ 2 d(A, P)=\|f(A) - f(P)\|^2 d(A,P)=∥f(A)−f(P)∥2小于Anchor与Negative的特征向量距离 d ( A , N ) = ∥ f ( A ) − f ( N ) ∥ 2 d(A, N)=\|f(A) - f(N)\|^2 d(A,N)=∥f(A)−f(N)∥2即 d ( A , P ) ≤ d ( A , N ) d(A, P) \leq d(A, N) d(A,P)≤d(A,N) 进一步可表示为 ∥ f ( A ) − f ( P ) ∥ 2 − ∥ f ( A ) − f ( N ) ∥ 2 + α ≤ 0 \|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha \leq 0 ∥f(A)−f(P)∥2−∥f(A)−f(N)∥2+α≤0 α \alpha α是超参数,大于 0 的间隔 值,避免计算出现 0 − 0 = 0 0-0=0 0−0=0的情况;同时用于加大正、负样本对之间的距离差异。假设, d ( A , P ) = 0.5 d(A, P)=0.5 d(A,P)=0.5, d ( A , N ) = 0.51 d(A, N)=0.51 d(A,N)=0.51,虽然满足不等式,但是仍不够好,加上 α \alpha α加大了正负样本之间的距离。

因此,三元组损失(Triplet Loss)函数:

给定三张图像,分别为Anchor(锚)、Positive(正样本)、Negative(负样本),记为 A A A、 P P P、 N N N。有损失函数 L ( A , P , N ) = m a x ( ∥ f ( A ) − f ( P ) ∥ 2 − ∥ f ( A ) − f ( N ) ∥ 2 + α , 0 ) L(A, P, N) = max(\|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha, 0) L(A,P,N)=max(∥f(A)−f(P)∥2−∥f(A)−f(N)∥2+α,0)如果计算的结果为负值,直接用 0 0 0表示不满足结果;否则计算的结果为正值。

在训练时,假设有10000个图片的训练集,有1000个不同人的照片。使用这10000个图片生成三元组,然后训练网络。训练的三元组要选差值很小,否则不起好的效果。

神经风格迁移

神经风格迁移是将一张图像的内容与另一张图像的风格相结合,生成有特定风格的新图像。

深度卷积网络可视化

输入一张大小为 224 × 224 × 3 224 \times 224 \times 3 224×224×3的图像,经过一系列卷积层和池化层,最后连接两个全连接层(FC),维度分别为4096,最终输出 y ^ \hat{y} y^。

希望看到该网络不同隐藏单元计算结果的可视化图,在第一层隐藏单元中选取一个神经元,找出能使其激活值最大化的假设九个图像块,这九个图像块激活了神经单元,对于该层,能看见图片浅层的区域,找到了一些边缘或者线(右下角第一个块)。对该层的其他神经元重复此操作,可以看到其他的特征。

继续更深一层的卷积层,这些层的神经元会看到一张图片的更大的部分。

神经风格迁移的代价函数

定义损失函数: J ( G ) = α J c o n t e n t ( C , G ) + β J s t y l e ( S , G ) J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) J(G)=αJcontent(C,G)+βJstyle(S,G)

  • J ( G ) J(G) J(G) 是生成图像 G G G 的总损失。
  • J c o n t e n t ( C , G ) J_{content}(C, G) Jcontent(C,G) 是内容图像 C C C 与生成图像 G G G 之间的内容损失,衡量二者内容的相似程。
  • J s t y l e ( S , G ) J_{style}(S, G) Jstyle(S,G) 是风格图像 S S S 与生成图像 G G G 之间的风格损失,衡量二者风格的相似程度。
  • α \alpha α 和 β \beta β 是超参数,调整内容损失和风格损失在总损失中的相对重要性。

内容损失函数

过程如下:

  • 利用预训练的卷积神经网络(如VGG网络),选取隐藏层 l l l 来计算内容损失。 l l l一般选择网络的中间层。不要太深也不要太浅。
  • 设 a l ( C ) a^{l(C)} al(C) 和 a l ( G ) a^{l(G)} al(G) 分别为内容图像 C C C 和生成图像 G G G 在网络隐藏层 l l l 的激活值。若二者相似,则表明两张图像内容相似, J c o n t e n t ( C , G ) = 1 2 ∥ a l ( C ) − a l ( G ) ∥ 2 J_{content}(C, G)=\frac{1}{2}\|a^{l(C)}-a^{l(G)}\|^2 Jcontent(C,G)=21∥al(C)−al(G)∥2 ,通过计算隐藏层激活值的均方误差来衡量内容上的差异。

风格损失函数

假设使用卷积神经网络中第 l l l层的激活值来衡量图像"风格"。风格的定义是该层不同通道激活值之间的相关性。通过这种方式,从神经网络的角度量化图像风格,在神经风格迁移等任务中,利用该定义来计算风格损失,以实现将一张图像的风格迁移到另一张图像上。

第 l l l层,假设有5个通道。如何计算前两个通道(红色和黄色)激活项的相关系数?假设在第一个通道的某个位置含有相关系数,第二个通道相同位置也包含某个激活值,它们组成一对数字,其他位置也是同样的组成很多对数字,这些数字如何计算如何计算相关系数?

在可视化中,如果红色对应的通道计算出的特征是可视化图的第二块,黄色对应通道是可视化的第四块。当这两个通道的数值有相关性,说明出现竖直线条的地方大概率颜色也是橙色的;不相关,说明出现竖直线条的地方大概率颜色不是橙色的。

设 a i , j , k l a_{i,j,k}^{l} ai,j,kl 为卷积神经网络第 l l l 层中位置 ( i , j ) (i,j) (i,j) 、通道 k k k 处的激活值。 G l G^{l} Gl 是一个 n c l × n c l n_c^{l} \times n_c^{l} ncl×ncl 的矩阵( n c l n_c^{l} ncl 为第 l l l 层的通道数)。

  • 风格图像 S S S: G k k ′ l ( S ) = ∑ i = 1 n H l ∑ j = 1 n W l a i j k l ( S ) a i j k ′ l ( S ) G_{kk'}^{l(S)} = \sum_{i = 1}^{n_H^{l}}\sum_{j = 1}^{n_W^{l}}a_{ijk}^{l(S)}a_{ijk'}^{l(S)} Gkk′l(S)=∑i=1nHl∑j=1nWlaijkl(S)aijk′l(S)。
  • 生成图像 G G G: G k k ′ l ( G ) = ∑ i = 1 n H l ∑ j = 1 n W l a i j k l ( G ) a i j k ′ l ( G ) G_{kk'}^{l(G)} = \sum_{i = 1}^{n_H^{l}}\sum_{j = 1}^{n_W^{l}}a_{ijk}^{l(G)}a_{ijk'}^{l(G)} Gkk′l(G)=∑i=1nHl∑j=1nWlaijkl(G)aijk′l(G)。
  • 损失为: J s t y l e l ( S , G ) = 1 ( 2 n H l n W l n c l ) 2 ∑ k ∑ k ′ ( G k k ′ l ( S ) − G k k ′ l ( G ) ) 2 J_{style}^{l}(S, G)=\frac{1}{(2n_H^{l}n_W^{l}n_c^{l})^2}\sum_{k}\sum_{k'}(G_{kk'}^{l(S)}-G_{kk'}^{l(G)})^2 Jstylel(S,G)=(2nHlnWlncl)21∑k∑k′(Gkk′l(S)−Gkk′l(G))2。

对于给定的卷积神经网络第 l l l 层,其通道数为 n c l n_c^{l} ncl, k k k 和 k ′ k' k′ 的取值范围都是从 1 1 1 到 n c l n_c^{l} ncl 。 a i j k l ( S ) a_{ijk}^{l(S)} aijkl(S) 是风格图像 S S S 在第 l l l 层位置 ( i , j ) (i, j) (i,j) 、通道 k k k 处的激活值, a i j k ′ l ( S ) a_{ijk'}^{l(S)} aijk′l(S) 是风格图像 S S S 在第 l l l 层位置 ( i , j ) (i, j) (i,j) 、通道 k ' k' k' 处的激活值 。

通过对所有空间位置 ( i , j ) (i, j) (i,j) 上,不同通道 k k k 与 k ′ k' k′ 对应的激活值乘积进行求和,得到 G k k ′ l ( S ) G_{kk'}^{l(S)} Gkk′l(S) 。 k k k 和 k ′ k' k′ 共同作用,获取不同通道激活值之间的相关性来定义图像的风格特征 。

相关推荐
黄啊码14 分钟前
【黄啊码】微信 AI 把聊天功能和 Vibe Coding打通了,创业者:我又白干了
人工智能
IT_陈寒1 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
用户413062258292 小时前
给AI回答加引用角标citation:RAG前端实现
人工智能
米小虾2 小时前
WAIC 2026 倒计时30天:300+ AI 产品全球首发,今年看点全解析
人工智能
码上天下3 小时前
多模态Agent上传图片:前端压缩格式与预览实战
人工智能
姗姗来迟了3 小时前
Vue3封装可复用AI对话组件:一次抽象复盘
人工智能
怕浪猫3 小时前
哪些软件对 Chrome DevTools Protocol 频繁使用
人工智能·架构·前端框架
leo在掘金5 小时前
从DeepSeek 510亿融资到GitHub 33K Star开源项目:这周的技术生态发生了什么?
人工智能