◇ OpenCyber Academy
Engenharia · Capítulo 1 · Português

Capítulo 1 — Cálculo I

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 1 — Cálculo I

Mapa da aula

Aula 01 publicada. Mapa, exemplo, EX001.

flowchart TD
  N0["1.1 Derivadas como sensibilidade"]
  N1["1.2 Regras que você usará o tempo todo"]
  N2["1.3 Conferindo derivadas numericamente"]
  N3["1.4 Por que engenheiros de segurança se importam"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX001"]

Desenho lógico

flowchart LR
  N0["1.1 Derivadas como sensibilidade"]
  N1["1.2 Regras que você usará o tempo todo"]
  N2["1.3 Conferindo derivadas numericamente"]
  N3["1.4 Por que engenheiros de segurança se importam"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX001"]
[1.1 Derivadas como sensibilidade]
    |
    v
[1.2 Regras que você usará o tempo todo]
    |
    v
[1.3 Conferindo derivadas numericamente]
    |
    v
[1.4 Por que engenheiros de segurança se importam]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX001]

Objetivos de aprendizagem

Você vai (1) calcular derivadas das funções usadas em aprendizado de máquina (polinômios, exponenciais, logaritmos, a função logística); (2) interpretar uma derivada como sensibilidade; (3) conferir derivadas numericamente; e (4) explicar por que a mesma derivada que treina um modelo também orienta um atacante.

1.1 Derivadas como sensibilidade

A derivada f′(x) mede quanto f muda quando x muda um pouco: f(x + h) ≈ f(x) + h f′(x). Engenheiros usam isso como uma sensibilidade: se o modelo de temperatura de um rolamento tem uma derivada grande em relação a uma entrada, pequenos erros do sensor causam grandes mudanças na saída. Modelos de aprendizado de máquina são funções de entradas e parâmetros, então as derivadas nos dizem como as saídas respondem a ambos. A aproximação vale apenas para h pequeno, de modo que uma derivada descreve a vizinhança de um ponto, não a função inteira. Por isso Sam sempre informa onde uma sensibilidade foi medida, por exemplo numa imagem diurna típica, e a confere de novo em outros pontos de operação antes de tirar conclusões sobre o modelo como um todo.

1.2 Regras que você usará o tempo todo

Regra da potência (xⁿ)′ = n xⁿ⁻¹; exponencial (eˣ)′ = eˣ; logaritmo (ln x)′ = 1/x; regras do produto, do quociente e da cadeia. A função logística σ(z) = 1/(1 + e⁻ᶻ) leva qualquer número real a (0, 1) e satisfaz σ′(z) = σ(z)(1 − σ(z)). A perda logística para um rótulo y ∈ {−1, +1} e pontuação z = w·x é L = ln(1 + e^(−y z)); pela regra da cadeia, ∂L/∂w = −y x / (1 + e^(y w x)). Vale a pena lembrar a derivada logística porque ela é máxima em z = 0, onde σ′ = 0.25, e encolhe em direção a zero à medida que a pontuação fica confiante em qualquer das direções. Entradas perto da fronteira de decisão são, portanto, onde pequenas mudanças mais movem a saída, e é exatamente aí que um atacante começa.

1.3 Conferindo derivadas numericamente

Uma diferença finita central (f(x + h) − f(x − h)) / 2h aproxima f′(x) com erro proporcional a h². Compará-la com sua fórmula analítica é o teste padrão para código de gradiente; uma divergência significa um bug. O laboratório faz exatamente isso e depois dá seis passos de descida do gradiente que reduzem a perda. Na tabela impressa, as duas colunas concordam até a sexta casa decimal nos quatro pontos de teste, inclusive em w = 2, onde o gradiente é pequeno. Os passos de descida mostram a perda caindo de 2.1269 para 0.0928, e os passos cada vez menores decorrem do achatamento do gradiente à medida que w cresce e o exemplo é classificado com mais confiança.

"""Lab G: gradients by calculus and by finite differences (stdlib only).
For logistic loss L(w) = log(1 + exp(-y * w * x)) the derivative is
dL/dw = -y * x / (1 + exp(y * w * x)). The same gradient drives both
training (descend) and evasion attacks (ascend with respect to the input)."""
import math
x, y = 2.0, 1.0
L = lambda w: math.log(1 + math.exp(-y * w * x))
dL = lambda w: -y * x / (1 + math.exp(y * w * x))
for w in (-1.0, 0.0, 0.5, 2.0):
    h = 1e-5
    fd = (L(w + h) - L(w - h)) / (2 * h)
    print(f"w={w:5.2f} loss={L(w):.4f} analytic={dL(w):.6f} finite_diff={fd:.6f}")
w = -1.0
for step in range(6):
    w -= 0.5 * dL(w)
    print(f"step {step+1}: w={w:.4f} loss={L(w):.4f}")

Saída esperada:

w=-1.00 loss=2.1269 analytic=-1.761594 finite_diff=-1.761594
w= 0.00 loss=0.6931 analytic=-1.000000 finite_diff=-1.000000
w= 0.50 loss=0.3133 analytic=-0.537883 finite_diff=-0.537883
w= 2.00 loss=0.0181 analytic=-0.035972 finite_diff=-0.035972
step 1: w=-0.1192 loss=0.8194
step 2: w=0.4401 loss=0.3469
step 3: w=0.7332 loss=0.2076
step 4: w=0.9207 loss=0.1472
step 5: w=1.0576 loss=0.1139
step 6: w=1.1652 loss=0.0928

1.4 Por que engenheiros de segurança se importam

O treinamento move os parâmetros contra o gradiente da perda. Um atacante de evasão move a entrada ao longo do gradiente da perda em relação à entrada, para aumentar a perda — a ideia por trás do fast gradient sign method (Goodfellow et al., arXiv:1412.6572). Assim, as derivadas são ao mesmo tempo o motor do aprendizado e um mapa para o atacante. Defesas que escondem ou quebram gradientes sem mudar o comportamento do modelo dão uma falsa sensação de segurança (Athalye et al., arXiv:1802.00420). Para quem revisa segurança, um gradiente é tanto uma ferramenta do atacante quanto de quem treina.

1.5 Exemplo resolvido (caso sintético da NRS)

Sam calcula a derivada da pontuação logística final do TrackEye em relação a um atributo de intensidade de pixel e encontra 0.8 por unidade, enquanto a maioria dos atributos fica abaixo de 0.05. Uma lente suja que desloca esse atributo em 0.5 muda a pontuação em cerca de 0.4 — o suficiente para inverter uma decisão limítrofe. Sam registra o atributo como uma entrada de alta sensibilidade para testes de robustez posteriores. A aritmética é a aproximação de primeira ordem em ação: 0.8 × 0.5 = 0.4. Ela vale apenas perto do ponto onde a derivada foi medida, então Sam depois confere a mudança real da pontuação em imagens com sujeira simulada, o que mostra se a estimativa linear subestima ou superestima o efeito. O atributo entra no plano de testes de robustez com essa ressalva registrada.

1.6 Erros e limites

Três erros são comuns: esquecer a derivada interna da regra da cadeia; usar um h pequeno demais nas diferenças finitas (erro de arredondamento) ou grande demais (erro de truncamento); e tratar um gradiente pequeno como prova de que nenhuma pequena mudança pode inverter a saída (funções podem ser não lineares). Cada erro tem uma proteção simples. Escrever explicitamente a função interna antes de derivar revela um fator da regra da cadeia que falta. Testar vários tamanhos de passo, como 1e-3, 1e-5 e 1e-7, mostra onde as diferenças finitas são estáveis, já que o erro primeiro cai e depois volta a subir. Quanto ao terceiro erro, um gradiente pequeno é tratado como motivo para testar diretamente mudanças maiores, nunca como garantia de que a saída não pode se inverter.

Exercícios

Síntese

Derivadas quantificam a sensibilidade. Elas treinam modelos e também mostram aos atacantes quais pequenas mudanças na entrada mais importam — o primeiro elo entre a matemática e a segurança de IA.

Continue estudando — capítulo 01 de 50

← Página do curso · Índice de capítulos do curso · Capítulo 02 (rascunho) →