< Return to Video

GAN CAP01 2025 VA05 APLICACAO EM PYTHON

  • 0:07 - 0:12
    Agora que você já sabe o que é
    um modelo de IA generativa,
  • 0:12 - 0:17
    nós vamos dar um mergulho
    mais profundo e começar a ver
  • 0:17 - 0:21
    como podemos implementar
    esses modelos na prática.
  • 0:21 - 0:25
    Para isso, precisamos conhecer
    a base desses modelos.
  • 0:25 - 0:27
    A base para modelos
    de IA generativas
  • 0:27 - 0:28
    são redes neurais artificiais,
  • 0:28 - 0:32
    e a base para redes neurais
    artificiais é álgebra linear.
  • 0:32 - 0:38
    Então, nesse laboratório, veremos
    uma revisão sobre a álgebra linear
  • 0:38 - 0:41
    utilizando a biblioteca
    NumPy do Python.
  • 0:41 - 0:46
    Álgebra linear, basicamente, é
    como podemos fazer operações
  • 0:46 - 0:48
    com vetores e matrizes.
  • 0:48 - 0:49
    Então, para começar
    esse laboratório,
  • 0:49 - 0:52
    a gente vai começar a relembrar
    um pouco sobre vetores
  • 0:52 - 0:56
    e ver como podemos representar
    esses vetores no Python.
  • 0:56 - 1:00
    Para isso, vamos utilizar
    a biblioteca NumPy do Python.
  • 1:00 - 1:05
    Essa biblioteca é especializada
    em cálculo numérico e álgebra linear,
  • 1:05 - 1:09
    então é a principal biblioteca
    do Python para esse fim.
  • 1:09 - 1:12
    Então, vamos começar o código
    mportando essa biblioteca
  • 1:12 - 1:14
    para dentro do código.
  • 1:14 - 1:17
    Então "import numpy as np".
  • 1:17 - 1:21
    Bom, para definir
    um vetor no NumPy,
  • 1:21 - 1:26
    eu posso utilizar o módulo
    "array" do NumPy.
  • 1:26 - 1:29
    Então, se eu criar
    um "vetor_a = np.array"
  • 1:29 - 1:32
    e passar uma lista
    de valores para ele,
  • 1:32 - 1:35
    ele vai criar
    um vetor para mim.
  • 1:35 - 1:39
    Se eu quiser criar
    um segundo vetor, "b",
  • 1:39 - 1:44
    eu também posso
    utilizar o mesmo código.
  • 1:44 - 1:47
    Então, "np.array", vou passar
    uma lista de valores
  • 1:47 - 1:55
    e será criado um array, ou um vetor,
    e associado à variável "vetor_b".
  • 1:55 - 1:59
    Nesse código aqui, vamos
    criar dois vetores, "A" e "B",
  • 1:59 - 2:01
    e vamos printar
    esses vetores.
  • 2:01 - 2:05
    Então, aqui nas respostas,
    vetor A e vetor B,
  • 2:05 - 2:08
    da forma como a gente
    criou anteriormente,
  • 2:08 - 2:10
    e as dimensões do vetor A,
  • 2:10 - 2:13
    por exemplo, o vetor B tem
    a mesma dimensão do vetor A.
  • 2:13 - 2:15
    Então, o que é a dimensão
    de um vetor?
  • 2:15 - 2:18
    São quantos elementos
    tem nesse vetor.
  • 2:18 - 2:22
    Então, esse vetor tem
    três elementos, perfeito?
  • 2:24 - 2:27
    Se eu quiser fazer a soma
    desses dois vetores,
  • 2:27 - 2:31
    eu posso simplesmente vir aqui
    e criar uma variável "soma_vetores",
  • 2:31 - 2:35
    que vai ser igual
    a "vetor_a + vetor_b".
  • 2:35 - 2:38
    E, aqui, eu vou printar
    a soma desses vetores.
  • 2:38 - 2:42
    Então, quando nós somamos dois
    vetores, qual a operação é feita?
  • 2:42 - 2:45
    Basicamente, uma soma,
    elemento a elemento,
  • 2:45 - 2:47
    então cada elemento
    do vetor A
  • 2:47 - 2:50
    vai ser somado com o mesmo
    elemento do vetor B,
  • 2:50 - 2:53
    e eu vou ter esse
    resultado aqui na soma.
  • 2:53 - 2:59
    Se eu quiser fazer uma subtração,
    da mesma forma, "vetor_a - vetor_b",
  • 2:59 - 3:03
    e o resultado é uma subtração
    elemento a elemento.
  • 3:03 - 3:07
    Então, eu posso, por exemplo, criar
    uma variável "vetor_multiplicado",
  • 3:07 - 3:13
    que vai ser igual ao vetor_a vezes
    um valor escalar, por exemplo, "2".
  • 3:13 - 3:16
    Essa multiplicação também
    será feita elemento a elemento,
  • 3:16 - 3:19
    então cada elemento do vetor A
    será multiplicado por 2,
  • 3:19 - 3:21
    e aqui a gente tem,
    no nosso código,
  • 3:21 - 3:24
    a resposta desse
    vetor multiplicado.
  • 3:24 - 3:27
    Então, 1 vezes 2,
    2 vezes 2, 3 vezes 2,
  • 3:27 - 3:31
    e a resposta aqui na variável
    vetor_multiplicado.
  • 3:31 - 3:33
    Uma outra operação
    muito importante
  • 3:33 - 3:35
    que eu posso fazer
    com dois vetores,
  • 3:35 - 3:37
    se chama "produto escalar".
  • 3:37 - 3:40
    O produto escalar
    entre dois vetores
  • 3:40 - 3:43
    é uma operação onde eu vou
    multiplicar esses dois vetores
  • 3:43 - 3:46
    e o resultado será
    um número escalar.
  • 3:46 - 3:48
    O que esse número representa?
  • 3:48 - 3:51
    Esse número representa
    um certo grau de similaridade
  • 3:51 - 3:53
    entre esses dois
    vetores, ou seja,
  • 3:53 - 3:56
    se esses vetores
    estiverem apontando
  • 3:56 - 4:00
    para uma mesma direção,
    esse produto será maior.
  • 4:00 - 4:04
    Se esses produtos estiverem
    perpendiculares um com o outro,
  • 4:04 - 4:08
    ou seja, se tiver um ângulo
    de 90 graus entre eles,
  • 4:08 - 4:12
    esse produto escalar vai
    retornar algo próximo de 0.
  • 4:12 - 4:15
    E se eles estiverem apontando
    para direções opostas,
  • 4:15 - 4:20
    isso significa que esse produto
    escalar terá um valor negativo.
  • 4:20 - 4:23
    Então, basicamente,
    o produto escalar
  • 4:23 - 4:25
    é uma forma de você
    multiplicar dois vetores
  • 4:25 - 4:27
    e obter um escalar
    como resposta,
  • 4:27 - 4:29
    e esse escalar tem
    um certo significado,
  • 4:29 - 4:32
    indica, mais ou menos,
    se esses dois vetores
  • 4:32 - 4:35
    estão apontando
    para direções parecidas.
  • 4:35 - 4:36
    Como eu calculo isso?
  • 4:36 - 4:39
    Por trás dos panos,
    eu estou fazendo
  • 4:39 - 4:42
    linhas de um vetor
    versus colunas do outro.
  • 4:42 - 4:44
    Então, se for necessário,
    por exemplo, nesse caso,
  • 4:44 - 4:47
    a gente tem vetores
    de mesmas dimensões,
  • 4:47 - 4:52
    o segundo vetor vai ser
    transposto, nesse caso.
  • 4:52 - 4:56
    Então, se eu fizer, aqui, o produto
    escalar do vetor A com o vetor B,
  • 4:56 - 4:59
    eu vou ter um número, 32.
  • 4:59 - 5:03
    Esse número indica,
    de certa forma,
  • 5:03 - 5:05
    se esses dois vetores
    estão apontando
  • 5:05 - 5:08
    para direções similares
    ou opostas.
  • 5:08 - 5:09
    Outro conceito
    muito importante
  • 5:09 - 5:11
    quando a gente fala
    de álgebra linear
  • 5:11 - 5:14
    é o conceito de matrizes.
  • 5:14 - 5:17
    Então, diferentemente dos vetores,
    que têm apenas uma dimensão,
  • 5:17 - 5:21
    as matrizes podem ter
    duas dimensões.
  • 5:21 - 5:24
    Então, as matrizes vão
    ter linhas e colunas.
  • 5:24 - 5:27
    Então, serão parecidas
    com uma tabelinha,
  • 5:27 - 5:29
    que teria linhas e colunas.
  • 5:29 - 5:32
    Então, eu posso criar, aqui
    no Python, uma matriz X,
  • 5:32 - 5:34
    usando o np.array,
  • 5:34 - 5:37
    e, em vez de passar apenas
    uma lista de valores,
  • 5:37 - 5:42
    eu vou passar uma lista
    de listas de valores,
  • 5:42 - 5:47
    onde cada lista vai representar
    uma linha dessa matriz.
  • 5:47 - 5:53
    Essa matriz tem duas linhas,
    essa linha e essa linha,
  • 5:53 - 5:57
    e duas colunas, essa
    coluna e essa coluna.
  • 5:57 - 6:01
    Então, é uma matriz que tem
    dimensões 2 por 2.
  • 6:01 - 6:04
    A matriz Y também é
    uma matriz 2 por 2,
  • 6:04 - 6:08
    porque ela tem duas
    linhas e duas colunas.
  • 6:08 - 6:13
    Se a gente rodar esse código,
    a gente vai ver essas duas matrizes
  • 6:13 - 6:20
    dispostas, aqui, da forma
    que a gente criou elas, perfeito?
  • 6:20 - 6:23
    As operações que a gente
    pode fazer com as matrizes
  • 6:23 - 6:26
    são muito similares às operações
    que a gente pode fazer
  • 6:26 - 6:29
    com os vetores.
  • 6:29 - 6:33
    Então, eu posso olhar
    para o shape dessa matriz,
  • 6:33 - 6:35
    vai me dar
    as dimensões dela,
  • 6:35 - 6:37
    então quais são
    as dimensões dessa matriz?
  • 6:37 - 6:39
    No vetor, a gente tinha
    apenas uma dimensão,
  • 6:39 - 6:43
    então a gente criou
    um vetor de três posições.
  • 6:43 - 6:47
    Aqui, eu tenho duas dimensões,
    eu tenho linhas e colunas,
  • 6:47 - 6:51
    então cada uma das nossas matrizes
    tem duas linhas e duas colunas.
  • 6:51 - 6:55
    Isso, a gente consegue saber usando
    o atributo "shape" da nossa matriz.
  • 6:57 - 6:59
    Da mesma forma
    como vetores,
  • 6:59 - 7:01
    como a gente fez
    para os nossos vetores,
  • 7:01 - 7:03
    a gente pode somar matrizes.
  • 7:03 - 7:06
    Então, quando eu somo
    a matriz X com a matriz Y,
  • 7:06 - 7:10
    eu estou fazendo a mesma operação
    que a gente fez para os vetores,
  • 7:10 - 7:12
    então eu estou somando,
    elemento a elemento,
  • 7:12 - 7:15
    os valores das duas matrizes.
  • 7:15 - 7:18
    Então, se a gente fizer
    a soma e printar essa soma,
  • 7:18 - 7:21
    a gente vai ter o resultado,
    que é a soma das duas matrizes,
  • 7:21 - 7:23
    elemento a elemento.
  • 7:23 - 7:25
    Da mesma forma,
    se a gente fizer a subtração
  • 7:25 - 7:30
    entre essas duas matrizes,
    eu também vou ter o resultado
  • 7:30 - 7:36
    como sendo uma matriz resultante
    de mesma dimensão, 2 por 2,
  • 7:36 - 7:38
    onde cada valor é a subtração,
    elemento a elemento,
  • 7:38 - 7:43
    dessas duas matrizes.
  • 7:43 - 7:48
    Por fim, eu posso multiplicar
    essa matriz, ou alguma matriz,
  • 7:48 - 7:52
    por um valor escalar, e aí eu
    também terei uma resposta
  • 7:52 - 7:56
    que vai ser a multiplicação desse
    escalar, por exemplo, o valor "3",
  • 7:56 - 7:59
    por cada elemento
    dessa matriz.
  • 7:59 - 8:02
    Então, o resultado também
    é uma matriz 2 por 2,
  • 8:02 - 8:05
    e essa matriz 2 por 2,
    cada elemento dela
  • 8:05 - 8:12
    é o resultado da multiplicação
    desse escalar pelo valor da matriz.
  • 8:12 - 8:17
    Da mesma forma que fizemos
    o produto escalar para vetores,
  • 8:17 - 8:19
    podemos, também,
    aplicar para matrizes,
  • 8:19 - 8:22
    porém, com uma pequena
    diferença.
  • 8:22 - 8:25
    Nos vetores, temos
    apenas uma dimensão,
  • 8:25 - 8:29
    nas matrizes, a gente
    tem duas dimensões.
  • 8:29 - 8:32
    Então, se eu criar
    uma matriz, por exemplo,
  • 8:32 - 8:35
    chamada "matriz_a_mult",
  • 8:35 - 8:39
    como uma matriz que vai ter
    duas linhas e três colunas,
  • 8:39 - 8:44
    eu utilizaria esse código
    aqui para criá-la.
  • 8:44 - 8:47
    Poderia criar, também,
    uma "matriz_b_mult",
  • 8:47 - 8:50
    essa matriz ao invés de ter
    duas linhas por três colunas,
  • 8:50 - 8:53
    vai ter três linhas
    por duas colunas.
  • 8:54 - 8:56
    Então, se a gente rodar
    esse código aqui,
  • 8:56 - 8:59
    a gente pode ver, aqui,
    as nossas duas matrizes.
  • 8:59 - 9:04
    Uma tem dimensões dois por três,
    uma tem dimensões três por dois.
  • 9:04 - 9:07
    Para fazer o produto escalar
    dessas duas matrizes,
  • 9:07 - 9:10
    eu posso utilizar o mesmo
    código do NumPy,
  • 9:10 - 9:12
    a mesma função,
    o mesmo método,
  • 9:12 - 9:15
    "np.dot", "matriz_a_mult"
    e "matriz_b_mult",
  • 9:15 - 9:20
    e eu vou ter o resultado
    dessa multiplicação.
  • 9:20 - 9:23
    Note que o resultado
    dessa multiplicação
  • 9:23 - 9:25
    é uma matriz de 2 por 2.
  • 9:25 - 9:27
    Então, existe uma regrinha
  • 9:27 - 9:32
    para a gente fazer multiplicação
    matricial através do produto escalar
  • 9:32 - 9:36
    e essa multiplicação
    ser possível.
  • 9:36 - 9:38
    Qual seria essa regra?
  • 9:38 - 9:44
    As dimensões da minha matriz A,
    a quantidade de colunas dela
  • 9:44 - 9:48
    tem que ser igual à quantidade
    de linhas da matriz B.
  • 9:48 - 9:50
    Então, sempre que eu estiver
    fazendo o produto escalar
  • 9:50 - 9:54
    entre duas matrizes, a quantidade
    de colunas da primeira
  • 9:54 - 9:58
    tem que ser igual à quantidade
    de linhas da segunda.
  • 9:58 - 10:03
    E o resultado sempre será
    a quantidade de linhas da primeira
  • 10:03 - 10:06
    por a quantidade
    de colunas da segunda.
  • 10:06 - 10:11
    Então, essas duas matrizes,
    eu posso multiplicar, por quê?
  • 10:11 - 10:13
    Porque elas obedecem
    o primeiro quesito,
  • 10:13 - 10:17
    a quantidade de colunas
    da matriz A
  • 10:17 - 10:20
    é igual à quantidade
    de linhas da matriz B.
  • 10:20 - 10:23
    E o resultado dessa conta
    desse produto escalar
  • 10:23 - 10:28
    vai dar a quantidade
    de linhas da matriz A
  • 10:28 - 10:32
    pela quantidade de colunas
    da matriz B, que vai dar 2 por 2.
  • 10:32 - 10:35
    Então, se a gente pudesse
    fixar um pouco essa regra,
  • 10:35 - 10:40
    você poderia pensar assim: quando
    eu for multiplicar duas matrizes,
  • 10:40 - 10:46
    fazer o produto escalar delas,
    os valores de dentro, ou seja,
  • 10:46 - 10:49
    a quantidade de colunas da primeira
    e de linhas da segunda
  • 10:49 - 10:53
    tem que ser igual, e o resultado
    vai dar os dois de fora, ou seja,
  • 10:53 - 10:55
    a quantidade de linhas
    da primeira
  • 10:55 - 10:58
    e a quantidade
    de colunas da segunda.
  • 10:58 - 11:00
    Então, seguindo aqui,
    vamos passar, agora,
  • 11:00 - 11:06
    por outras operações relevantes
    no nosso contexto de álgebra linear.
  • 11:06 - 11:09
    Um conceito mega importante,
    uma operação mega importante
  • 11:09 - 11:11
    é inverter uma matriz.
  • 11:11 - 11:16
    Para inverter uma matriz, qualquer
    matriz tem que ser quadrada,
  • 11:16 - 11:18
    como a que a gente
    está criando aqui,
  • 11:18 - 11:24
    "matriz_quadrada = np.array",
    uma matriz de 2 por 2.
  • 11:24 - 11:26
    Então, o que é
    uma matriz quadrada?
  • 11:26 - 11:29
    Mesma quantidade de linhas é
    a mesma quantidade de colunas.
  • 11:29 - 11:31
    E ela precisa ser não singular.
  • 11:31 - 11:37
    Ser não singular significa que
    o determinante dela não pode ser 0.
  • 11:37 - 11:42
    Então, basicamente, inverter
    uma matriz, no Python,
  • 11:42 - 11:47
    a gente pode fazer utilizando
    o módulo do NumPy de linear algebra,
  • 11:47 - 11:50
    então "np.linalg",
  • 11:50 - 11:54
    e do linalg, eu vou usar
    o método "inv", de inverter.
  • 11:54 - 11:57
    Então, vou criar uma variável
    matriz inversa
  • 11:57 - 11:59
    e vou atribuir
    para ela a inversa,
  • 11:59 - 12:03
    o cálculo da inversa dessa matriz
    quadrada que a gente criou.
  • 12:03 - 12:07
    Quando a gente inverte
    uma matriz, o que significa?
  • 12:07 - 12:10
    É como se eu estivesse
    fazendo um cálculo análogo
  • 12:10 - 12:14
    a 1 sobre um determinado
    número, esse é o inverso dela.
  • 12:14 - 12:15
    Então, 1 sobre
    essa matriz
  • 12:15 - 12:20
    é a mesma coisa que a inversa
    dessa matriz, perfeito?
  • 12:20 - 12:22
    Então, se a gente
    rodar esse código,
  • 12:22 - 12:25
    a gente vai ver, aqui, a matriz
    quadrada que a gente tinha criado
  • 12:25 - 12:28
    e, aqui, a inversa
    dessa matriz quadrada.
  • 12:28 - 12:31
    Ela é uma matriz quadrada,
    então ela pode ser invertível
  • 12:31 - 12:35
    e ela é não singular, então ela
    pode ser invertível também,
  • 12:35 - 12:39
    tem que obedecer esses
    dois critérios aí, perfeito?
  • 12:39 - 12:41
    E aí, a gente pode,
    depois, no nosso código
  • 12:41 - 12:46
    verificar essa inversão
    dessa matriz.
  • 12:46 - 12:47
    Como eu poderia
    fazer isso?
  • 12:47 - 12:51
    Se eu fizer o produto escalar
    da matriz original com a sua inversa,
  • 12:51 - 12:56
    eu tenho que ter como resultado
    a matriz identidade, ou seja,
  • 12:56 - 12:59
    a matriz identidade
    no contexto de álgebra
  • 12:59 - 13:00
    é como se fosse o valor 1.
  • 13:00 - 13:04
    Então, é como se eu multiplicasse
    a matriz por 1 sobre a matriz,
  • 13:04 - 13:08
    eu vou ter 1 como resposta, é isso
    que quer dizer esse código aqui.
  • 13:10 - 13:12
    Seguindo no nosso código,
  • 13:12 - 13:15
    como a gente falou
    de determinante da matriz,
  • 13:15 - 13:16
    a gente pode verificar, aqui,
  • 13:16 - 13:19
    como calcular o determinante
    de uma matriz.
  • 13:19 - 13:22
    Então, vou criar,
    aqui, uma matriz
  • 13:22 - 13:25
    para a gente calcular
    o determinante com base nela
  • 13:25 - 13:29
    e eu vou utilizar o mesmo módulo
    de linear algebra do NumPy,
  • 13:29 - 13:34
    só que eu vou usar, agora,
    o método "det", de determinante.
  • 13:34 - 13:36
    Então, qual é o determinante
    dessa matriz?
  • 13:36 - 13:38
    Se a gente rodar
    esse código,
  • 13:38 - 13:42
    a gente vai ver que o determinante
    dessa matriz é 4.99.
  • 13:42 - 13:45
    Se eu tiver
    uma matriz singular,
  • 13:45 - 13:48
    o que significa
    uma matriz singular?
  • 13:48 - 13:51
    Significa que é uma matriz
    cujo determinante é 0.
  • 13:51 - 13:55
    Se o determinante dela é 0, eu
    não consigo inverter essa matriz.
  • 13:55 - 13:58
    Então, essa matriz
    singular que a gente criou
  • 13:58 - 14:03
    mais embaixo do nosso código é
    uma matriz que não teria inversa,
  • 14:03 - 14:08
    não seria possível calcular
    a inversa dessa matriz, perfeito?
  • 14:08 - 14:13
    Outra operação extremamente
    importante é a norma de um vetor.
  • 14:13 - 14:17
    Então, a norma de um vetor
    é como a gente calcula,
  • 14:17 - 14:20
    de certa forma,
    o tamanho desse vetor.
  • 14:20 - 14:22
    Então, a norma desse vetor...
  • 14:22 - 14:26
    Existem várias formas de se
    calcular a norma de um vetor.
  • 14:26 - 14:30
    A mais conhecida e a mais
    utilizada é a norma L2,
  • 14:30 - 14:33
    que é também conhecida
    como a norma Euclidiana.
  • 14:33 - 14:35
    Então, ela é dada
    por essa continha aqui,
  • 14:35 - 14:41
    então vai ser a raiz quadrada
    da soma dos valores dessa matriz,
  • 14:41 - 14:45
    desse vetor, ao quadrado,
    então a raiz quadrada da soma
  • 14:45 - 14:49
    dos quadrados dos valores
    dessa matriz, perfeito?
  • 14:49 - 14:52
    Então, se a gente tiver
    aqui uma matriz 3 e -4,
  • 14:52 - 14:56
    a norma Euclidiana
    dessa matriz vai ser 5.
  • 14:56 - 14:58
    Como eu chego
    nesse cálculo?
  • 14:58 - 15:01
    Fazendo a raiz quadrada
    da soma dos quadrados
  • 15:01 - 15:05
    dos valores desse
    vetor, perfeito?
  • 15:05 - 15:09
    Bom, então, para calcular
    a norma Euclidiana,
  • 15:09 - 15:12
    eu posso usar o módulo
    de álgebra linear do NumPy,
  • 15:12 - 15:16
    utilizando o método
    "norm", certo?
  • 15:16 - 15:19
    E eu vou ter a norma
    Euclidiana.
  • 15:19 - 15:24
    Existem, também, outras formas
    de normas que a gente pode utilizar,
  • 15:24 - 15:26
    por exemplo, a norma
    de Frobenius.
  • 15:26 - 15:28
    Não é uma norma
    muito utilizada,
  • 15:28 - 15:32
    mas apenas para a gente conseguir
    visualizar que existe um parâmetro,
  • 15:32 - 15:36
    eu posso parametrizar o tipo
    de norma que eu quero
  • 15:36 - 15:40
    na função, no método
    "norm" do NumPy.
  • 15:40 - 15:45
    Então, por padrão, essa biblioteca
    já utiliza a norma Euclidiana,
  • 15:45 - 15:49
    mas eu poderia definir outra
    dentre as normas possíveis,
  • 15:49 - 15:51
    e, para saber
    as normas possíveis,
  • 15:51 - 15:56
    a gente pode olhar na documentação
    dessa biblioteca, perfeito?
  • 15:57 - 16:04
    Outro cálculo muito interessante,
    muito importante para criar IAs
  • 16:04 - 16:07
    e para a álgebra linear
    como um todo,
  • 16:07 - 16:10
    é você calcular
    distâncias entre vetores.
  • 16:10 - 16:11
    Então, eu posso
    ter dois vetores
  • 16:11 - 16:16
    e eu quero calcular o quão
    distantes esses vetores são.
  • 16:16 - 16:19
    Para fazer a distância
    entre vetores,
  • 16:19 - 16:22
    eu posso, simplesmente,
    calcular a diferença entre eles.
  • 16:22 - 16:23
    Então, se eu calcular
    a diferença entre eles,
  • 16:23 - 16:25
    eu vou ter um
    menos o outro,
  • 16:25 - 16:29
    eu vou ter a distância de cada
    vetor em cada dimensão.
  • 16:31 - 16:35
    Quando eu quero criar, utilizar
    uma distância Euclidiana,
  • 16:35 - 16:36
    o que é a distância Euclidiana?
  • 16:36 - 16:40
    É uma distância baseada
    na norma Euclidiana,
  • 16:40 - 16:42
    então vai ser a norma L2,
  • 16:42 - 16:46
    a norma Euclidiana da diferença
    entre os dois vetores,
  • 16:46 - 16:52
    então eu vou fazer a raiz quadrada
    das diferenças elevado ao quadrado,
  • 16:52 - 16:53
    essa que é a conta.
  • 16:53 - 16:58
    No Python, eu poderia,
    simplesmente, fazer a norma
  • 16:58 - 17:01
    das diferenças dos vetores
    que a gente calculou aqui.
  • 17:01 - 17:06
    E, aqui, eu coloco a ordem 2,
    a ordem já é presumida que é o 2,
  • 17:06 - 17:08
    por default, e aí,
    a gente tem, aqui,
  • 17:08 - 17:11
    o que a gente chama de distância
    Euclidiana entre dois vetores,
  • 17:11 - 17:16
    o quão distantes esses
    dois vetores estão, certo?
  • 17:16 - 17:20
    Outra métrica bastante interessante
    para se calcular entre dois vetores
  • 17:20 - 17:22
    é a distância de Manhattan.
  • 17:22 - 17:24
    Então, a única diferença
    entre a distância Euclidiana
  • 17:24 - 17:28
    e a distância de Manhattan
    é a ordem dessa norma.
  • 17:28 - 17:31
    Então, uma a gente
    chama de norma L2,
  • 17:31 - 17:32
    a distância Euclidiana,
  • 17:32 - 17:34
    a distância de Manhattan,
    a gente chama de L1,
  • 17:34 - 17:38
    tudo por causa da norma,
    da ordem da norma.
  • 17:38 - 17:40
    O que isso muda
    na prática?
  • 17:40 - 17:41
    Na norma euclidiana,
  • 17:41 - 17:45
    isso muda que a gente usa
    o quadrado das diferenças.
  • 17:45 - 17:48
    Na norma de Manhattan,
    na distância de Manhattan,
  • 17:48 - 17:51
    norma L1, a gente
    usa o módulo,
  • 17:51 - 17:53
    como se estivesse
    usando uma ordem 1,
  • 17:53 - 17:58
    elevado a 1, esse número, então
    a gente usa a norma dos valores.
  • 17:58 - 18:01
    Então, se a gente verificar aqui,
    a gente vai ter diferentes normas
  • 18:01 - 18:04
    e cada norma dessa vai ser
    mais útil ou menos útil
  • 18:04 - 18:07
    dependendo do caso
    de uso que a gente tiver.
  • 18:09 - 18:13
    Outras operações úteis aqui
    no contexto de álgebra linear:
  • 18:13 - 18:15
    a gente pode transpor uma matriz,
    então, frequentemente,
  • 18:15 - 18:19
    a gente vai ter que calcular
    a transposta de uma matriz.
  • 18:19 - 18:21
    O que é a transposta
    de uma matriz?
  • 18:21 - 18:24
    É simplesmente eu transformar
    o que era linha em coluna
  • 18:24 - 18:27
    e o que era coluna em linha.
  • 18:27 - 18:30
    Então, se eu criar uma matriz
    3 por 2 com esses valores,
  • 18:30 - 18:31
    com esses elementos,
  • 18:31 - 18:35
    a transposta dessa matriz
    original vai ser, simplesmente,
  • 18:35 - 18:39
    essa matriz transposta, ou seja,
    linhas vão virar colunas
  • 18:39 - 18:45
    e colunas vão virar linhas, então,
    no final, a dimensão dessa matriz
  • 18:45 - 18:49
    vai de 3 por 2
    para 2 por 3.
  • 18:49 - 18:51
    Então, vamos rodar
    esse código para visualizar.
  • 18:51 - 18:54
    Eu tinha uma matriz
    original 3 por 2,
  • 18:54 - 18:59
    a matriz transposta
    vai ser 2 por 3.
  • 18:59 - 19:03
    Outro conceito interessante é
    você criar uma matriz identidade.
  • 19:03 - 19:07
    Então, a matriz identidade é
    uma matriz similar a um número 1,
  • 19:07 - 19:11
    então aquela matriz que, se você
    multiplicar uma matriz por ela,
  • 19:11 - 19:14
    é como se você estivesse
    multiplicando um número por 1,
  • 19:14 - 19:16
    então vai dar ela mesma.
  • 19:16 - 19:19
    Então, a matriz identidade
    no Python, utilizando NumPy,
  • 19:19 - 19:22
    a gente usa a função "eye".
  • 19:22 - 19:26
    Se eu colocar aqui,
    como entrada, 2,
  • 19:26 - 19:30
    eu vou ter uma matriz
    identidade 2 por 2,
  • 19:30 - 19:34
    se eu colocar 3, eu vou ter
    uma matriz identidade 3 por 3.
  • 19:34 - 19:37
    Então, matriz identidade sempre
    são matrizes quadradas, ou seja,
  • 19:37 - 19:41
    mesmo número
    de linhas e de colunas.
  • 19:41 - 19:46
    Então se a gente rodar aqui, a gente vai ter a matriz identidade 2
  • 19:46 - 19:52
    por 2, vou ter a matriz transposta, e se eu multiplicar uma matriz
  • 19:52 - 19:59
    por sua identidade, se eu fizer o produto escalar entre eles, eu vou
  • 19:59 - 20:02
    ter como resultado a mesma matriz original.
  • 20:03 - 20:04
    Certo?
  • 20:05 - 20:10
    1, 2, 3, 4, resposta 1, 2, 3, 4, perfeito?
  • 20:11 - 20:15
    Agora algumas funções auxiliares que o numpy oferece para a gente.
  • 20:15 - 20:19
    Então o numpy oferece, por exemplo, uma funçãozinha que é
  • 20:19 - 20:24
    interessante para o que a gente vai fazer durante as aulas, que se
  • 20:24 - 20:25
    chama linspace.
  • 20:26 - 20:27
    O que esse linspace faz?
  • 20:27 - 20:33
    Ele simplesmente cria pontos linearmente, igualmente espaçados, vamos
  • 20:33 - 20:33
    dizer assim.
  • 20:34 - 20:36
    Então o que essa funçãozinha aqui está fazendo?
  • 20:37 - 20:44
    Eu vou criar 5 pontos entre 0 e 10, e esses pontos vão ser
  • 20:44 - 20:45
    linearmente espaçados.
  • 20:46 - 20:49
    Então 0, 2.5, 5, 7.5, 10.
  • 20:50 - 20:53
    Tenho 5 pontos e a distância entre eles é igual.
  • 20:56 - 20:57
    Outras funções auxiliares.
  • 20:58 - 21:03
    Eu posso criar uma matriz só com 0s no Python, utilizando a função np
  • 21:03 - 21:08
    .0s, e aqui eu posso passar como entrada, como parâmetro para essa
  • 21:08 - 21:11
    função, a dimensão da matriz que eu quero criar.
  • 21:11 - 21:15
    Então eu vou criar uma matriz de 0s com dimensões 2 linhas e 3
  • 21:15 - 21:16
    colunas.
  • 21:16 - 21:21
    Da mesma forma eu posso criar uma matriz de números 1s, utilizando np
  • 21:21 - 21:25
    .ones. Vou passar aqui, eu quero criar uma matriz de 3 linhas e 2
  • 21:25 - 21:28
    colunas, só com números 1s.
  • 21:28 - 21:32
    Então está aqui a nossa matriz de 0s e a nossa matriz de 1s.
  • 21:33 - 21:39
    E a gente pode também concatenar esses vetores, ou seja, eu posso
  • 21:39 - 21:42
    juntar dois vetores ou juntar duas matrizes.
  • 21:42 - 21:50
    Então aqui, por exemplo, eu tenho uma matriz chamada array1 e essa
  • 21:50 - 21:56
    matriz é np.array, primeira linha, segunda linha, cada uma com duas
  • 21:56 - 21:56
    colunas.
  • 21:57 - 22:02
    E eu posso ter um vetor, uma matriz que na verdade aqui vai ter
  • 22:02 - 22:05
    uma linha só, uma linha e duas colunas.
  • 22:06 - 22:12
    Então se eu concatenar esses dois arrays aqui, esses dois vetores,
  • 22:12 - 22:18
    essas duas matrizes aqui no caso, eu vou ter, na verdade, no final
  • 22:18 - 22:22
    uma matriz, esse array concatenado vai adicionar essa linha nesse
  • 22:22 - 22:24
    vetor original que tinha só duas linhas.
  • 22:25 - 22:28
    Então vou ter um vetor de 3 linhas e 2 colunas, uma matriz, no
  • 22:28 - 22:30
    caso, de 3 linhas e 2 colunas.
  • 22:32 - 22:37
    Esse parâmetro aqui, axis, ele significa quando é 0 eu vou adicionar
  • 22:37 - 22:41
    nas linhas, quando é colunas eu vou adicionar nas colunas.
  • 22:42 - 22:44
    Então um eu vou adicionar embaixo, o outro eu vou adicionar ao lado,
  • 22:45 - 22:45
    é como se fosse isso.
  • 22:47 - 22:50
    Então aqui eu tenho um exemplo tanto adicionando linhas a uma matriz
  • 22:50 - 22:54
    original, quanto adicionando colunas a uma matriz original.
  • 22:54 - 22:59
    Então se a gente rodar esse exemplo, eu tenho a matriz 1, 2 por
  • 22:59 - 23:03
    2, e a matriz 2, que é uma linha por duas colunas.
  • 23:04 - 23:08
    Quando eu concateno elas utilizando o eixo 0, o axis 0, eu vou
  • 23:08 - 23:10
    adicionar uma linha a mais.
  • 23:11 - 23:19
    No outro exemplo, debaixo, eu tenho uma matriz aqui de duas linhas e
  • 23:19 - 23:24
    uma coluna, e eu vou concatenar um array nas colunas, então eu vou
  • 23:24 - 23:26
    adicionar duas colunas diferentes.
  • 23:27 - 23:32
    Então eu continuo com 7 e 8, vou adicionar o 1, 3, 2, 4
  • 23:32 - 23:37
    aqui, como colunas novas nessa matriz original.
  • 23:39 - 23:43
    E por último, para fechar o nosso lab, eu também posso utilizar uma
  • 23:43 - 23:48
    função de reshape nos meus dados, nos meus arrays, nos meus vetores e
  • 23:48 - 23:48
    matrizes.
  • 23:49 - 23:50
    O que o reshape vai fazer?
  • 23:50 - 23:55
    Eu consigo alterar o formato dessa matriz ou desse array.
  • 23:55 - 23:59
    Então imagina que eu tenho uma matriz aqui, um array na verdade, que
  • 23:59 - 24:02
    eu tenho 6 elementos nesse array.
  • 24:02 - 24:08
    Eu posso reshape, fazer um reshape nesse dado, nessa matriz, e
  • 24:08 - 24:11
    transformá-lo em uma matriz de duas linhas e três colunas.
  • 24:12 - 24:17
    O único ponto aqui importante para a gente pensar é, no final, essa
  • 24:17 - 24:18
    conta tem que fechar.
  • 24:18 - 24:24
    Então se eu tenho 6 colunas, 6 números, 6 elementos nesse vetor, e eu
  • 24:24 - 24:28
    quero transformá-lo em uma matriz, as dimensões aqui têm que
  • 24:28 - 24:33
    multiplicar e dar o mesmo resultado que a quantidade de elementos
  • 24:33 - 24:34
    desse vetor original.
  • 24:35 - 24:38
    Então se eu tenho 6 elementos, 2 vezes 3 tem que dar 6.
  • 24:38 - 24:42
    Eu poderia também fazer 3 por 2, ou 6 por 1, mas eu não
  • 24:42 - 24:45
    poderia fazer 2 por 4, porque daria erro.
  • 24:45 - 24:49
    Então se a gente rodar aqui, tem o array original, e esse array,
  • 24:49 - 24:54
    quando eu fizer o reshape de 2 por 3 dele, ele vai reajustar esses
  • 24:54 - 24:57
    elementos em uma matriz de duas linhas e três colunas.
  • 24:57 - 25:00
    Se eu colocasse 4 aqui, daria erro.
  • 25:00 - 25:01
    Por que daria erro?
  • 25:02 - 25:03
    Porque eu só tenho 6 elementos.
  • 25:04 - 25:08
    Para fazer um reshape de 2 e 4, eu teria que ter 8 elementos.
  • 25:08 - 25:12
    Então o único ponto de atenção seria esse.
  • 25:13 - 25:18
    Então agora você já sabe muito sobre a generativa e já deu seus
  • 25:18 - 25:24
    primeiros passos sobre álgebra linear para conseguir você mesmo
  • 25:24 - 25:26
    implementar os seus próprios modelos de a generativa.
Title:
GAN CAP01 2025 VA05 APLICACAO EM PYTHON
Video Language:
Portuguese, Brazilian
Duration:
25:30

Portuguese, Brazilian subtitles

Revisions Compare revisions