Todas as respostas aqui são ótimas, mas, por algum motivo, nada foi dito até agora sobre por que esse efeito não deve surpreendê- lo. Vou preencher o espaço em branco.
Deixe-me começar com um requisito absolutamente essencial para que isso funcione: o invasor deve conhecer a arquitetura de rede neural (número de camadas, tamanho de cada camada, etc.). Além disso, em todos os casos que eu me examinei, o invasor conhece o instantâneo do modelo usado na produção, ou seja, todos os pesos. Em outras palavras, o "código fonte" da rede não é um segredo.
Você não pode enganar uma rede neural se a tratar como uma caixa preta. E você não pode reutilizar a mesma imagem enganadora para redes diferentes. De fato, você precisa "treinar" a rede de destino e aqui, treinando, quero passar passes para frente e para trás, mas especialmente criados para outro objetivo.
Por que está funcionando?
Agora, aqui está a intuição. As imagens são muito dimensionais: até o espaço de pequenas imagens coloridas de 32x32 possui 3 * 32 * 32 = 3072
dimensões. Mas o conjunto de dados de treinamento é relativamente pequeno e contém imagens reais, todas com alguma estrutura e boas propriedades estatísticas (por exemplo, suavidade da cor). Portanto, o conjunto de dados de treinamento está localizado em uma minúscula variedade desse enorme espaço de imagens.
As redes convolucionais funcionam extremamente bem nessa variedade, mas basicamente não sabem nada sobre o resto do espaço. A classificação dos pontos fora do coletor é apenas uma extrapolação linear com base nos pontos dentro do coletor. Não é de admirar que alguns pontos específicos sejam extrapolados incorretamente. O atacante precisa apenas de uma maneira de navegar até o ponto mais próximo desses pontos.
Exemplo
Deixe-me dar um exemplo concreto de como enganar uma rede neural. Para torná-lo compacto, vou usar uma rede de regressão logística muito simples com uma não linearidade (sigmóide). É preciso uma entrada 10-dimensional x
, calcula um número único p=sigmoid(W.dot(x))
, que é a probabilidade da classe 1 (versus a classe 0).
Suponha que você saiba W=(-1, -1, 1, -1, 1, -1, 1, 1, -1, 1)
e comece com uma entrada x=(2, -1, 3, -2, 2, 2, 1, -4, 5, 1)
. Um passe para frente dá sigmoid(W.dot(x))=0.0474
ou 95% de probabilidade que x
é exemplo da classe 0.
Gostaríamos de encontrar outro exemplo, y
que é muito próximo, x
mas é classificado pela rede como 1. Observe que x
é 10-dimensional, portanto, temos a liberdade de ajustar 10 valores, o que é muito.
Como W[0]=-1
é negativo, é melhor ter um pequeno y[0]
para fazer uma contribuição total de y[0]*W[0]
pequeno. Portanto, vamos fazer y[0]=x[0]-0.5=1.5
. Da mesma forma, W[2]=1
é positiva, por isso é melhor para aumentar y[2]
a fazer y[2]*W[2]
maior: y[2]=x[2]+0.5=3.5
. E assim por diante.
O resultado é y=(1.5, -1.5, 3.5, -2.5, 2.5, 1.5, 1.5, -3.5, 4.5, 1.5)
e sigmoid(W.dot(y))=0.88
. Com essa alteração, melhoramos a probabilidade de classe 1 de 5% para 88%!
Generalização
Se você observar atentamente o exemplo anterior, perceberá que eu sabia exatamente como ajustar x
para movê-lo para a classe de destino, porque conhecia o gradiente da rede. O que fiz foi na verdade uma retropropagação , mas com relação aos dados, em vez de pesos.
Em geral, o invasor começa com a distribuição de destino (0, 0, ..., 1, 0, ..., 0)
(zero em todos os lugares, exceto a classe que deseja obter), retropropagou para os dados e fez um pequeno movimento nessa direção. O estado da rede não é atualizado.
Agora, deve ficar claro que é um recurso comum das redes feed-forward que lidam com um pequeno coletor de dados, independentemente da profundidade ou da natureza dos dados (imagem, áudio, vídeo ou texto).
Poção
A maneira mais simples de impedir que o sistema seja enganado é usar um conjunto de redes neurais, isto é, um sistema que agrega os votos de várias redes em cada solicitação. É muito mais difícil retropropagar em relação a várias redes simultaneamente. O invasor pode tentar fazer isso sequencialmente, uma rede por vez, mas a atualização para uma rede pode facilmente atrapalhar os resultados obtidos para outra rede. Quanto mais redes são usadas, mais complexo o ataque se torna.
Outra possibilidade é suavizar a entrada antes de passá-la para a rede.
Uso positivo da mesma ideia
Você não deve pensar que a retropropagação da imagem tenha apenas aplicativos negativos. Uma técnica muito semelhante, chamada deconvolução , é usada para visualização e melhor compreensão do que os neurônios aprenderam.
Essa técnica permite sintetizar uma imagem que causa o disparo de um neurônio em particular, basicamente visualmente "o que o neurônio está procurando", o que geralmente torna as redes neurais convolucionais mais interpretáveis.