< 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:28
    nas matrizes, a gente
    tem duas dimensões.
  • 8:29 - 8:34
    Então se eu criar uma matriz, por exemplo, chamada matriz A multi,
  • 8:35 - 8:41
    como uma matriz que vai ter duas linhas e três colunas, eu utilizaria
  • 8:41 - 8:43
    esse código aqui para criá-la.
  • 8:44 - 8:48
    Poderia criar também uma matriz B multi, essa matriz ao invés de ter
  • 8:48 - 8:52
    duas linhas por três colunas, vai ter três linhas por duas colunas.
  • 8:54 - 8:57
    Então se a gente rodar esse código aqui, a gente pode ver aqui as
  • 8:57 - 8:58
    nossas duas matrizes.
  • 8:59 - 9:03
    Uma tem dimensões dois por três, uma tem dimensões três por dois.
  • 9:04 - 9:08
    Para fazer o produto escalar dessas duas matrizes, eu posso utilizar
  • 9:08 - 9:13
    o mesmo código do NumPy, a mesma função, o mesmo método, np.dot
  • 9:13 - 9:18
    matriz A e matriz B, e eu vou ter o resultado dessa multiplicação.
  • 9:20 - 9:24
    Note que o resultado dessa multiplicação é uma matriz de dois por
  • 9:24 - 9:24
    dois.
  • 9:25 - 9:29
    Então existe uma regrinha para a gente fazer multiplicação matricial
  • 9:29 - 9:35
    através do produto escalar e essa multiplicação ser possível.
  • 9:36 - 9:37
    Qual seria essa regra?
  • 9:38 - 9:44
    As dimensões da minha matriz A, a quantidade de colunas dela, tem que
  • 9:44 - 9:48
    ser igual à quantidade de linhas da matriz B.
  • 9:48 - 9:50
    Então sempre que eu estiver fazendo o produto escalar entre duas
  • 9:50 - 9:55
    matrizes, a quantidade de colunas da primeira tem que ser igual à
  • 9:55 - 9:57
    quantidade de linhas da segunda.
  • 9:58 - 10:04
    E o resultado sempre será a quantidade de linhas da primeira por a
  • 10:04 - 10:06
    quantidade de colunas da segunda.
  • 10:06 - 10:10
    Então essas duas matrizes eu posso multiplicá-las, por quê?
  • 10:10 - 10:16
    Porque ela obedece o primeiro quesito, a quantidade de colunas da
  • 10:16 - 10:19
    matriz A é igual à quantidade de linhas da matriz B.
  • 10:20 - 10:26
    E o resultado dessa conta desse produto escalar vai dar a quantidade
  • 10:26 - 10:31
    de linhas da matriz A pela quantidade de colunas da matriz B, que vai
  • 10:31 - 10:32
    dar dois por dois.
  • 10:32 - 10:36
    Então se a gente pudesse fixar um pouco essa regra, você poderia
  • 10:36 - 10:41
    pensar assim, quando eu for multiplicar duas matrizes, fazer o
  • 10:41 - 10:47
    produto escalar delas, os valores de dentro, ou seja, a quantidade de
  • 10:47 - 10:50
    colunas da primeira e de linhas da segunda, tem que ser iguais.
  • 10:51 - 10:54
    E o resultado vai dar os dois de fora, ou seja, a quantidade de
  • 10:54 - 10:58
    linhas da primeira e a quantidade de colunas da segunda.
  • 10:58 - 11:02
    Então seguindo aqui, vamos passar agora por outras operações
  • 11:02 - 11:05
    relevantes no nosso contexto de álgebra linear.
  • 11:06 - 11:10
    Um conceito mega importante, uma operação mega importante é inverter
  • 11:10 - 11:11
    uma matriz.
  • 11:11 - 11:16
    Para inverter uma matriz, qualquer matriz tem que ser quadrada, como
  • 11:16 - 11:23
    a que a gente está criando aqui, matriz quadrada igual NP-array, uma
  • 11:23 - 11:24
    matriz de dois por dois.
  • 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:36
    Ser não singular significa que o determinante dela não pode ser zero.
  • 11:37 - 11:43
    Então basicamente inverter uma matriz, no Python, a gente pode fazer
  • 11:43 - 11:47
    utilizando o módulo do NumPy de linear algebra.
  • 11:47 - 11:54
    Então np.linalg, e do linalg eu vou usar o método inv, de inverter.
  • 11:54 - 11:59
    Então vou criar uma variável matriz inversa e vou atribuir para ela a
  • 11:59 - 12:02
    inversa, o cálculo da inversa dessa matriz quadrada que a gente
  • 12:02 - 12:02
    criou.
  • 12:03 - 12:06
    Quando a gente inverte uma matriz, o que que significa?
  • 12:07 - 12:11
    É como se eu estivesse fazendo um cálculo análogo a um sobre um
  • 12:11 - 12:12
    determinado número.
  • 12:12 - 12:13
    Esse é o inverso dela.
  • 12:14 - 12:18
    Então um sobre essa matriz é a mesma coisa que a inversa dessa
  • 12:18 - 12:19
    matriz, perfeito?
  • 12:20 - 12:24
    Então se a gente rodar esse código, a gente vai ver aqui a matriz
  • 12:24 - 12:27
    quadrada que a gente tinha criado e aqui é a inversa dessa matriz
  • 12:27 - 12:28
    quadrada.
  • 12:28 - 12:32
    Ela é uma matriz quadrada, então ela pode ser invertível e ela é não
  • 12:32 - 12:35
    singular, então ela pode ser invertível também.
  • 12:35 - 12:38
    Tem que obedecer esses dois critérios aí, perfeito?
  • 12:39 - 12:45
    E aí a gente pode depois no nosso código verificar essa inversão
  • 12:45 - 12:45
    dessa matriz.
  • 12:46 - 12:47
    Como que 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, a
  • 12:56 - 13:00
    matriz identidade no contexto de álgebra é como se fosse o valor 1.
  • 13:00 - 13:04
    Então é como se eu multiplicasse a matriz por 1 sobre a matriz, eu
  • 13:04 - 13:05
    vou ter 1 como resposta.
  • 13:05 - 13:07
    É isso que quer dizer nesse código aqui.
  • 13:10 - 13:14
    Seguindo no nosso código, como a gente falou de determinante da
  • 13:14 - 13:18
    matriz, a gente pode verificar aqui como calcular o determinante de
  • 13:18 - 13:19
    uma matriz.
  • 13:19 - 13:24
    Então vou criar aqui uma matriz para a gente calcular o determinante
  • 13:24 - 13:28
    com base nela e eu vou utilizar o mesmo módulo de linear álgebra do
  • 13:28 - 13:33
    NumPy, 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:39
    Se a gente rodar esse código, a gente vai ver que o determinante
  • 13:39 - 13:46
    dessa matriz é 4.99. Se eu tiver uma matriz singular, o que significa
  • 13:46 - 13:47
    uma matriz singular?
  • 13:47 - 13:50
    Significa que é uma matriz cujo determinante é 0.
  • 13:51 - 13:54
    Se o determinante dela é 0, logo eu não consigo inverter essa matriz.
  • 13:55 - 13:59
    Então essa matriz singular que a gente criou mais embaixo do nosso
  • 13:59 - 14:04
    código é uma matriz que não teria inversa, não seria possível
  • 14:04 - 14:06
    calcular a inversa dessa matriz.
  • 14:08 - 14:12
    Outra operação extremamente importante é a norma de um vetor.
  • 14:12 - 14:18
    Então a norma de um vetor é como a gente calcula, de certa forma,
  • 14:18 - 14:19
    o tamanho desse vetor.
  • 14:20 - 14:25
    Então a norma desse vetor, existem várias formas de se calcular a
  • 14:25 - 14:25
    norma de um vetor.
  • 14:26 - 14:31
    A mais conhecida e a mais utilizada é a norma L2, que é também
  • 14:31 - 14:33
    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, desse
  • 14:41 - 14:43
    vetor, ao quadrado.
  • 14:44 - 14:47
    Então a raiz quadrada da soma dos quadrados dos valores dessa matriz.
  • 14:48 - 14:53
    Então se a gente tiver aqui uma matriz 3 e menos 4, a norma
  • 14:53 - 14:56
    euclidiana dessa matriz vai ser 5.
  • 14:56 - 14:58
    Como que eu chego nesse cálculo?
  • 14:58 - 15:03
    Fazendo a raiz quadrada da soma dos quadrados dos valores desse
  • 15:03 - 15:03
    vetor.
  • 15:05 - 15:10
    Bom, então para calcular a norma euclidiana, eu posso usar o módulo
  • 15:10 - 15:16
    de álgebra linear do NumPy, utilizando o método norm, certo?
  • 15:16 - 15:18
    Eu vou ter a norma euclidiana.
  • 15:19 - 15:23
    Existem também outras formas de norma, de normas que a gente pode
  • 15:23 - 15:23
    utilizar.
  • 15:24 - 15:26
    Por exemplo, a norma de Frobenius.
  • 15:26 - 15:30
    Não é uma norma muito utilizada, mas apenas para a gente conseguir
  • 15:30 - 15:35
    visualizar que existe um parâmetro, eu posso parametrizar o tipo de
  • 15:35 - 15:39
    norma que eu quero na função, no método norm do NumPy.
  • 15:40 - 15:45
    Então por padrão a gente utiliza, essa biblioteca já utiliza a norma
  • 15:45 - 15:49
    euclidiana, mas eu poderia definir outra dentre as normas possíveis e
  • 15:49 - 15:53
    para saber as normas possíveis a gente pode olhar na documentação
  • 15:53 - 15:55
    dessa biblioteca, perfeito?
  • 15:57 - 16:05
    Outro cálculo muito interessante, muito importante para criar IAs e
  • 16:05 - 16:09
    para a álgebra linear como um todo, é você calcular distâncias entre
  • 16:09 - 16:09
    vetores.
  • 16:10 - 16:13
    Então eu posso ter dois vetores e eu quero calcular o quão distantes
  • 16:13 - 16:14
    esses vetores são.
  • 16:16 - 16:21
    Para fazer a distância entre vetores, eu posso simplesmente calcular
  • 16:21 - 16:22
    a diferença entre eles.
  • 16:22 - 16:25
    Então se eu calcular a diferença entre eles eu vou ter um menos o
  • 16:25 - 16:25
    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, o que é a
  • 16:35 - 16:36
    distância euclidiana?
  • 16:36 - 16:41
    É uma distância baseada na norma euclidiana, então vai ser a norma
  • 16:41 - 16:45
    L2, a norma euclidiana da diferença entre os dois vetores.
  • 16:46 - 16:51
    Então eu vou fazer a raiz quadrada das diferenças elevado ao
  • 16:51 - 16:52
    quadrado, essa que é a conta.
  • 16:53 - 16:59
    No Python, eu poderia simplesmente fazer a norma das diferenças dos
  • 16:59 - 17:00
    vetores que a gente calculou aqui.
  • 17:01 - 17:05
    E aqui eu coloco a ordem 2, a ordem já é presumida que é
  • 17:05 - 17:08
    o 2, por default, e aí a gente tem aqui o que a gente
  • 17:08 - 17:12
    chama de distância euclidiana entre dois vetores, o quão distantes
  • 17:12 - 17:15
    esses dois vetores estão, certo?
  • 17:16 - 17:19
    Outra métrica bastante interessante para se calcular entre dois
  • 17:19 - 17:21
    vetores é a distância de Manhattan.
  • 17:22 - 17:25
    Então a única diferença entre a distância euclidiana e a distância de
  • 17:25 - 17:28
    Manhattan é a ordem dessa norma.
  • 17:28 - 17:32
    Então 1 a gente chama de norma L2, a distância euclidiana, a
  • 17:32 - 17:36
    distância de Manhattan a gente chama de L1, tudo por causa da norma,
  • 17:36 - 17:38
    da ordem da norma.
  • 17:38 - 17:40
    O que é que isso muda na prática?
  • 17:40 - 17:43
    Na norma euclidiana isso muda que a gente usa o quadrado das
  • 17:43 - 17:44
    diferenças.
  • 17:45 - 17:50
    Na norma de Manhattan, na distância de Manhattan, norma L1, a gente
  • 17:50 - 17:54
    usa o módulo, como se estivesse usando uma ordem 1, elevado a 1 aqui,
  • 17:54 - 17:57
    esse número, então a gente usa a norma dos valores.
  • 17:58 - 18:02
    Então se a gente verificar aqui a gente vai ter diferentes normas e
  • 18:02 - 18:06
    cada norma dessa vai ser mais útil ou menos útil dependendo do caso
  • 18:06 - 18:07
    de uso que a gente tiver.
  • 18:09 - 18:13
    Outras operações úteis aqui no contexto de álgebra linear, a gente
  • 18:13 - 18:16
    pode transpor uma matriz, então frequentemente a gente vai ter que
  • 18:16 - 18:18
    calcular a transposta de uma matriz.
  • 18:19 - 18:21
    O que é a transposta de uma matriz?
  • 18:21 - 18:25
    É simplesmente eu transformar o que era linha em coluna e o que era
  • 18:25 - 18:26
    coluna em linha.
  • 18:27 - 18:31
    Então se eu criar uma matriz 3 por 2 com esses valores, com esses
  • 18:31 - 18:35
    elementos, a transposta dessa matriz original vai ser simplesmente
  • 18:35 - 18:40
    essa matriz transposta, ou seja, linhas vão virar colunas e colunas
  • 18:40 - 18:41
    vão virar linhas.
  • 18:41 - 18:47
    Então no final a dimensão dessa matriz vai ir de 3 por 2 para
  • 18:47 - 18:48
    2 por 3.
  • 18:49 - 18:51
    Então vamos rodar esse código aqui para visualizar.
  • 18:51 - 18:57
    Eu tinha uma matriz original 3 por 2, a matriz transposta vai ser 2
  • 18:57 - 18:57
    por 3.
  • 18:59 - 19:02
    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, então
  • 19:07 - 19:11
    aquela matriz que se você multiplicar uma matriz por ela, é como se
  • 19:11 - 19:15
    você estivesse multiplicando um número por 1, então vai dar ela
  • 19:15 - 19:15
    mesma.
  • 19:16 - 19:20
    Então a matriz identidade no Python, utilizando numpy, a gente usa a
  • 19:20 - 19:21
    função i.
  • 19:22 - 19:29
    Se eu colocar aqui como entrada 2, eu vou ter uma matriz identidade 2
  • 19:29 - 19:30
    por 2.
  • 19:30 - 19:34
    Se eu colocar 3, eu vou ter uma matriz identidade 3 por 3.
  • 19:34 - 19:38
    Então matriz identidade sempre são matrizes quadradas, ou seja, mesmo
  • 19:38 - 19:40
    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