Aiffel 인공지능 후기 week 04(21/01/18~22)

HHHHH·2021년 1월 22일
0

AIFFEL-인공지능

목록 보기
4/16

터미널로 배우는 리눅스 체제

솔직히 어려웠다. 윈도우에서 탐색기를 이리 저리 이동하면서 파일 옮기면 불편했던게 터미널 창으로 다 된다는게 편리하긴했는데 익숙치않은 명령어가 너무 많았다. 그래도 인상깊었던 명령어는 아래와 같다.

참고할 만한 글 링크

webdir님 티스토리 리눅스 카테고리

딥러닝 for 컴퓨터비전 Optimization

강의 링크

공부하고 싶었던 주제였기 때문에 발표하겠다고 나섰던 주제였습니다.
adagrad Rmsprop adam등 이름만 알고 썻던 알고리즘에 대해서 더 알게될 수있었습니다.
특히 여러 문제점들을 비교적 간단한 수학적 trick을 통해서 해결하는 모습은 역시 사람은 배워야 한다는 것을 보여주는 것 같았습니다.

특히 adam은 정말 다양한 분야에도 다 잘 적용되는 점이 참 신기했습니다.

아시웠던 점은 헤시안 매트릭스를 통한 2차 근사와 관련된 내용을 강의에선 깊게 다루지 않아서 좀 더 궁금증이 생겼습니다. 단순히 full batch를 사용할때에는 L-BFGS을 사용하라 정도로만 언급이 되었습니다.


짤은 최초의 moment1, moment2가 작은 탓에 초반의 잘못된 경로가 velocity로 많이 지정되는 문제점을 해결하기 위한 bias correction을 해결하는 트릭

참고할만한 글들
그라디언트, 헤시안, 자코비안 정리

그라디언트 디센트

0021 Gradient Descent & Momentum

인공 신경망을 위한 확률적 경사 하강법

Adam Optimization 논문 요약/정리

사람이 말하는 단어를 인공지능으로 구현해보자

음성데이터를 다룬 첫 경험이었다. 혼동되는 개념이 너무 많아서 개념을 정리해보았다.

소리의 물리량

  1. 진폭(Amplitude)
  2. 주파수(Frequency)
  3. 위상(Phase)

예를 들어 가장 간단한 아날로그 소리는 이런 sin식으로 나타낼수 있다고한다.

Asin(2πftϕ)A s i n ( 2 π f t − ϕ )
A는진폭(amplitude)으로위,아래로움직이는소리의크기A 는 진폭(amplitude)으로 위, 아래로 움직이는 소리의 크기
f는주파수(frequnecy),초당진동횟수즉,소리의세기주파수가높으면빠르게진동해소리의세기가커짐.f 는 주파수(frequnecy)로, 초당 진동 횟수 즉, 소리의 세기주파수가 높으면 빠르게 진동해 소리의 세기가 커짐.
ϕ은위상t는시간.ϕ은 위상 t는 시간.

아날로그 소리의 디지털화

위같은 아날로그 소리를 samping을 통해서 이산화하는데 이때의 비율을
sampling rate라고 한다. 최대 주파수의 최소 2배 이상의 속도로 sampig rate를 잡으면 디지털과 아날로그를 정보손실 없이 가능하다고 한다. 그 후 양자화, 부호화를 통해서 디지털화를 한다고한다.

wav data
한 소리는 여러 소리 파형이 합쳐진 복합파라고 볼 수 있는데 그 복합파를 1개의 wav파일로 정리한 것이라 볼 수 있다고 한다. 특히 wav 파일은 소리를 1차원 시계열 데이터로 정리한 것이라고 한다.

퓨리에 변환을 통한 스펙트럼화

위의 wav를 주파수 대역별로 나누어 별도로 해석할수있는데 퓨리에 변환을 통해서 스펙트럼을 나눌수있다고한다. 그렇게 스펙트럼을 만들면 2차원의 데이터로 소리를 나타 낼 수 있다고 한다. 식으로 표현하면 아래와 같다고 한다.

X(l,k)=n=0N1ω(n)x(n+lH)exp2πknNX ( l , k ) = \sum_{n=0}^{N-1} ω ( n ) x ( n + l H ) e x p^{ \frac{− 2 π k n}{N} }

N은 FFT size, Window를 얼마나 많은 주파수 밴드로 나누는 가를 의미
Duration은 sampling rate를 window로 나눈 값
T=window/sampling rate.
duration은 신호주기보다 5배이상 길게 잡아야한다고한다. 즉
T(window)=5T(Signal).
예를 들어 440Hz신호의 window size는 5(1/440)이 됩니다.
ω(n)ω(n) 는 window 함수를 나타냅니다.
일반적으로는 hann window가 많이 쓰입니다.
n는 window size입니다.
window 함수에 들어가는 sample의 양입니다.

n이 작을 수록 low-frequency resolution을 가지게 되고,
high-time resolution을 가지게 되고,
n이 길수록 high-frequency를 가지고 되고
low-time resolution을 가지게 됩니다.

H는 hop size를 의미합니다. 윈도우가 겹치는 사이즈입니다. 일반적으로는 1/4정도를 겹치게 한다고한다.

주의) sampling rate = 1/T
보통 rate는 1/T로 계산을 하구요. 즉 T = 1/sampligrate가됨
: T=window/sampling rate, Duration은 T와 다른 요소이다.

데이터 시각화

ggplot2만 사용했었는데 기본적인 개념은 비슷한 느낌. 아직 세부적인 사용은 좀 더 해봐야할 껏 같다. seaborn의 색감이 이쁘긴한것같다.

작사가 인공지능 만들기

generate_text(model, tokenizer, init_sentence="<start> i love", max_len=7)

'<start> i love you <end> '

내가 학습 시킨 모델에 i love라는 단어를 주었을 때의 작사였다. 잘 학습이 됐다.

사이킷 런으로 구현한 머신러닝

사이킷런 설명
사이킷런의 특징에 대한 설명하는 PyCon 2018 영상 링크

이렇게 쉽게 여러 모델들을 구현할수있는게 python에 있는지 몰랐었다..
진짜 편리하게 학습할수있게 되어있는것같다.

scikit-learn 홈페이지
scikit-learn Api 설명

파이썬 알고리즘

투 포인터 방식이 인상깊어서 정리해보았다.

기본적인 원칙은
일단 먼저 sort를 하고 시작한다.
그후 첫자리에 left, 가장 끝에 right를 지정한후
연산을 처리한다. 목표값과 연산된 값을 비교해
값이 작으면 left를 우측으로, 값보다 크면 right를 왼쪽으로 이동시킨다.

이 간단한 구조로 O(N3N^{3})을 O(N2N^{2})까지 낮출수 있다니 신기하다

실제 leetcode 15번의 풀이에서 활용하는 법은 아래와 같다.

q15 3sum 문제링크


class Solution:
    def threeSum(self, nums):
        results = []
        nums.sort()
        for i in range(len(nums)-2):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            left, right = i+1 , len(nums) - 1 
            while left < right:
                sum = nums[i] + nums[left] + nums[right]
                if sum < 0:
                    left += 1
                elif sum > 0:
                    right -= 1 
                else:
                    results.append((nums[i], nums[left],nums[right]))                
                    while left < right and nums[left] == nums[left+1]:
                        left += 1 
                    while left < right and nums[right] == nums[right -1]:
                        right -= 1 
                    left += 1
                    right -= 1 
        return results
      
profile
공부중

0개의 댓글

관련 채용 정보