전체 글 181

[2021 NIPA AI 교육 - 응용 / 딥러닝] 03 다양한 신경망(이미지, 자연어 처리 CNN, RNN)

오늘은 다양한 신경망에 대해 배워보겠다. 다양한 신경망에서는 이미지 처리와 자연어 처리에 대해서 배울 것이다. 첫 번째로 이미지 처리를 위한 데이터 전 처리에 대해 배워보겠다. 우리 주변에는 위와 같은 이미지 처리 기술들이 있다. 이 기술들안에 딥러닝 기술이 포함되어 있다. 위와 같이 고양이 사진을 받아서 이것이 고양이인지 분류를 하기 위해서는 이미지를 모델에 입력을 해야한다. 그런데 우리는 그동안 잘 정리되어있는 정형 데이터만 DataFrame의 형태로 입력을 해왔다. 하지만 이미지는 DataFrame의 형태가 아니다. 그래서 먼저 이미지를 어떻게 데이터로 사용할 수 있는지 알아보겠다. 컴퓨터는 위와 같이 이미지를 픽셀 값을 가진 숫자 배열로 인식한다. (네모 한칸이 픽셀이다. 값은 픽셀을 채워주는 색..

인공지능 공부 2021.08.30

[Python/파이썬] 백준 알고리즘 11052번 - 카드 구매하기 (DP)

지금까지 푼 문제 중에는 가장 까다로웠다.. 다이나믹 프로그래밍을 통해 푸는 문제다. 먼저 Bottom-Up 방식으로 dp의 1번 인덱스부터 차근차근 생각해보겠다. 편의상 Pi 카드팩을 i번 카드팩이라고 부르겠다. dp[1] = 1을 만드는 방법 : 1번 카드팩 1개 dp[2] = 2를 만드는 방법 : 2번 카드팩 1개 or 1번 카드팩 2개 중 큰 것 dp[3] = 3을 만드는 방법 : 3번 카드팩 1개 or 1번 카드팩 1개 + dp[2] 중 큰 것 (여기서 1,1,1로 3을 만드는 경우, 1,2로 3을 만드는 경우는 dp[2]에서 처리가 끝난 것이다.) ... dp[n] = n을 만드는 방법 : n번 카드팩 1개 or 1번 카드팩 1개 + dp[n-1] or dp[2] + dp[n-2] or .. ..

[2021 NIPA AI 교육 - 응용 / 딥러닝] 02 텐서플로우와 신경망

오늘은 딥러닝을 어떻게 학습시키는지 방법을 배우고 텐서플로우를 바탕으로 딥러닝을 구현해보겠다. 지난 시간에 히든층이 많아지면 신경망이 더 깊어지고 이를 딥러닝이라고 한다고 했다. 이 딥러닝의 구성요소에 대해 알아보겠다. 보라색 원은 노드 또는 유닛이라고 부른다. 노드는 각 층을 구성하는 요소이다. 그리고 이 노드들을 연결하는 선을 가중치라고 얘기한다. 이 가중치는 노드 사이의 연결강도를 정한다. 마지막으로 모델을 구성하는 층을 레이어라고 한다. 이제 본격적으로 딥러닝 모델의 학습 방법에 대해 알아보겠다. 퍼셉트론, 딥러닝 둘 다 마찬가지로 최종적인 목적은 Loss 함수를 최소화하는 가중치를 찾는 것이다. 이것이 딥러닝 모델의 학습 방법이다. 이 가중치를 찾기 위해서는 최적화 알고리즘을 사용하게 되는데 뒤..

인공지능 공부 2021.08.25

[Python/파이썬] 백준 알고리즘 11726번 - 2×n 타일링 (DP)

n = int(input()) dp = [0] * 1001 dp[1] = 1 dp[2] = 2 for i in range(3, 1001): dp[i] = dp[i-2] + dp[i-1] print(dp[n] % 10007) 처음에는 너무 복잡하게 생각했다. 그냥 간단하게 수열의 점화식을 찾고, 그 값들을 리스트에 저장하는 메모이제이션 방법을 사용해 풀면 되는 것이었다. 나열되는 방법의 수들의 규칙성을 찾고 그것을 점화식으로 표현하면 다음과 같다. dp[i] = dp[i-2] + dp[i-1] 이 점화식을 이용해 리스트에 값들을 메모이제이션하기에 앞서 2x1 크기의 직사각형을 채우는 방법의 수는 1, 2x2 크기의 직사각형을 채우는 방법의 수는 2이므로 dp[1], dp[2]에 각각 1과 2를 먼저 넣는다..

[Python/파이썬] 백준 알고리즘 1463번 - 1로 만들기 (동적 계획법 / 다이나믹 프로그래밍 풀이)

힌트 : 10의 경우에 10 -> 9 -> 3 -> 1로 3번만에 만들 수 있다. 이 문제는 전에 결과를 다음 결과에 이용하는 Dynamic Programming(동적 계획법) 문제이다. 힌트를 보면 정수 X가 10인 경우 10 -> 9 -> 3 -> 1 의 과정으로 1이 된다고 했는데, 10은 정수 X가 9인 경우의 횟수에 +1을 한 값이고 9는 정수 X가 3인 경우의 횟수에 +1을 한 값이고 3은 정수 X가 1인 경우의 횟수에 +1을 한 값이다. 다시 말해서 10을 구할 때는 9의 결과를, 9를 구할 때는 3의 결과를 이용한다. 따라서 아래의 조건을 만족하기 때문에, 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 답은 그것을 포함하는 큰 문제에서도 동일하다. 동적 계획법을 사용..

[2021 NIPA AI 교육 - 응용 / 딥러닝] 01 퍼셉트론

이번 시간에는 인공 신경망으로 알려진 딥러닝의 개념을 이해하고 신경망의 가장 기본 단위인 퍼셉트론에 대해 배워보겠다. 우선 인공지능, 머신러닝, 딥러닝의 관계에 대해 확인해보고 시작하겠다. 인공지능이라는 것은 말 그대로 인공적으로 사람의 지능을 구현하는 컴퓨터 시스템을 만드는 것을 의미한다. 이러한 기술을 실현하는데는 다양한 방법론들이 있고 그 중 하나가 머신러닝이다. 이런 머신러닝 기술도 다양한 기술들이 있고 그 중 한 가지 기술이 딥러닝이라고 보면 된다. 이제 본격적으로 딥러닝이란 무엇인지 알아보도록 하겠다. 딥러닝은 인공신경망에 기반해 사람의 사고방식을 가르치는 방법이다. 여기서 인공신경망이란 생물학의 신경망에서 영감을 얻은 학습 알고리즘으로 사람의 신경 시스템을 모방했다. 사람의 신경 시스템은 뉴..

인공지능 공부 2021.08.24

[TOEIC] Part 5 공부

1. introductory course : 입문 강좌 (연어) 2. workstation : 작업대 3. divider : 칸막이 4. distraction : 주의력 분산, 주의 산만 5. turnout : 참가자 수, 투표자 수 6. aloud : [형] 소리내어, 큰 소리로 7. training : [명] 훈련, 교육 (train은 명사로 훈련의 의미 x) 8. authorize : [동] (공식적으로) 허가하다, 권한을 주다. 9. entire과 whole은 정해진 전부를 가리키는 경우, 주로 정관사 the 또는 소유격과 함께 쓰인다. 10. complete information : 완전한, 모든 것이 갖춰진 정보 11. relatively : 비교적으로 12. assign : 배정하다. 13...

언어공부/영어 2021.08.24

다이나믹 프로그래밍(Dynamic Programming)이란 (동적 계획법 / 동적 프로그래밍) (Top-Down, Bottom-Up)

다이나믹 프로그래밍(동적 계획법)이란 무엇일까? 다이나믹 프로그래밍(동적 계획법)은 하나의 문제는 단 한 번만 풀도록 하는 알고리즘이다. 일반적인 분할 정복 기법(ex. 일반적 재귀로 구현한 피보나치 수열 함수)의 경우 동일한 문제를 다시 푼다는 단점을 가지고 있다. 이러한 경우에 하나의 문제를 단 한 번만 풀게해 더 효율적으로 만드는 것이 다이나믹 프로그래밍이다. 다이나믹 프로그래밍은 아래와 같은 가정 하에 사용할 수 있다. 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 답은 그것을 포함하는 큰 문제에서도 동일하다. 이 가정중 두번째가 가장 핵심적인 것이다. 작은 문제에서 구한 정답이 큰 문제에서의 문제와 동일하기 때문에 작은 문제에서 구한 정답을 잠시 배열에 저장을 해놓고 나중..

[Python/파이썬] 백준 알고리즘 10866번 - 덱 (Stack 두 개로 덱 구현하는 방법)

https://kbwplace.tistory.com/87 [Python/파이썬] 백준 알고리즘 1406번 - 에디터 string = list(input()) N = len(string) M = int(input()) cursor = N for _ in range(M): command = input().split() if command[0] == "L": if cursor > 0: cursor -= 1 elif command[0].. kbwplace.tistory.com 여기서 풀었던 방법을 응용했다. 문제의 시간 제한이 0.5초로 빡빡한 편이라 시간 단축을 위해서 insert와 같은 high cost의 함수는 사용하지 않고 append, pop 함수만으로 구현해야한다. 이것을 구현하는 방법은 위의 140..

[Python/파이썬] 백준 알고리즘 1158번 - 요세푸스 문제

N, K = map(int, input().split()) circular_queue = [i for i in range(1, N+1)] cursor = K-1 result = [] while circular_queue: result.append(str(circular_queue.pop(cursor))) # 순서 중요! N 감소가 cursor 이동보다 선행되어야 함. N -= 1 if N > 0: if (cursor + K) % N == 0: cursor = N - 1 else: cursor = (cursor + K) % N - 1 print("") 처음에 저 N -= 1을 뒷 순서에 놔서 애먹었다.. 커서를 이동시켜가며 해당 인덱스에 도달했을때 pop해 result 리스트에 넣고 마지막에 출력하는 방식..

반응형