DATA/머신 러닝

DATA/머신 러닝

    [머신 러닝] RNN과 CNN을 사용해 시퀀스 처리하기

    미래를 예측하는 것은 우리가 늘 하는 일입니다. 이번 포스트에서는 미래를 어느 정도 예측할 수 있는 네트워크인 순환 신경망을 알아보겠습니다. 이 신경망은 시계열 데이터를 분석해서 주식가격 같은 것을 예측해 언제 사고팔지 알려줄 수 있습니다. 일반적으로 이 신경망은 지금까지 봤던 모든 네트워크처럼 고정 길이 입력이 아닌 임의 길이를 가진 시퀀스를 다룰 수 있습니다. 예를 들어, 문장, 문서, 오디오 샘플을 입력으로 받을 수 있고, 자동 번역, 스피치 투 텍스트같은 자연어 처리(NLP)에 매우 유용합니다. 순환 뉴런과 순환 층 지금까지는 활성화 신호가 입력층에서 출력층으로 한 방향으로만 흐르는 피드포워드 신경망에 초점을 맞추었습니다. 순환 신경망은 피드포워드 신경망과 매우 비슷하지만 뒤쪽으로 순환하는 연결도..

    [머신 러닝] 합성곱 신경망을 사용한 컴퓨터 비전

    합성곱 신경망(CNN)은 대뇌의 시각 피질 연구에서 시작되었고 1980년대부터 이미지 인식 분야에 사용됐습니다. CNN은 이미지 검색 서비스, 자율주행 자동차, 영상 자동 분류 시스템 등에 큰 기여를 했습니다. 또한 CNN은 시각 분야에 국한되지 않고 음성 인식이나 자연어 처리(NLP) 같은 다른 작업에도 많이 사용됩니다. 그러나 이번 포스트에서는 시각적 애플리케이션에 초점을 맞추겠습니다. 합성곱 층과 풀링 층부터 시작해서 하나하나 알아보겠습니다. 합성곱 층 합성곱 층은 CNN에서 가장 중요한 요소입니다. 첫 번째 합성곱 층의 뉴런은 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 합성곱 층 뉴런의 수용장 안에 있는 픽셀에만 연결됩니다. 두 번째 합성곱 층에 있는 각 뉴런은 첫 번째 층의 작은 사각 영역..

    [머신 러닝] 텐서플로를 사용한 사용자 정의 모델과 훈련

    사용자 정의 모델과 훈련 알고리즘 가장 간단하고 많이 사용하는 사용자 정의 손실 함수를 만들어보겠습니다. 사용자 정의 손실 함수 회귀 모델을 훈련하는 데 훈련 세트에 잡음 데이터가 조금 있을 때, 이상치를 제거하거나 고쳐서 데이터셋을 수정할 수 있지만, 비효율적이고 잡음이 여전히 있을 수 있습니다. 이럴 때 평균 제곱 오차를 쓰면 큰 오차에 너무 과한 벌칙을 가해서 정확하지 않은 모델이 만들어질 것이고, 평균 절댓값 오차는 이상치에 관대해서 훈련이 수렴되기까지 식나이 걸리고 모델이 정밀하지 않을 것입니다. 이런 경우 후버 손실을 사용하면 좋습니다. 후버 손실은 아직 케라스 공식 API에서 지원하지 않습니다. tf.keras에서는 지원하기는 하지만, (keras.losses.Huber 클래스를 사용하면 됩..

    [머신 러닝] 머신러닝을 위한 텐서플로

    텐서플로 훑어보기 텐서플로는 강력한 수치 계산용 라이브러리입니다. 특히 대규모 머신러닝에 잘 맞도록 튜닝되어 있습니다. 텐서플로가 제공하는 것들을 간단히 요약하면 아래와 같습니다. 핵심 구조는 넘파이와 매우 비슷하지만 GPU를 지원합니다. (여러 장치와 서버에 대해서) 분산 컴퓨팅을 지원합니다. 일종의 JIT(just-in-time) 컴파일러를 포함합니다. 속도를 높이고 메모리 사용량을 줄이기 위해 계산을 최적화합니다. 이를 위해 파이썬 함수에서 계산 그래프를 추출한 다음 최적화하고 효율적으로 실행합니다. 계산 그래프는 플랫폼에 중립적인 포맷으로 내보낼 수 있으므로 한 환경에서 텐서플로 모델을 훈련하고 다른 환경에서 실행할 수 있습니다. 텐서플로는 자동 미분 기능과 RMSProp, Nadam과 같은 고성..

    [머신 러닝] 심층 신경망 훈련하기

    고해상도 이미지에서 수백 종류의 물체를 감지하는 것처럼 아주 복잡한 문제를 다뤄야 한다면 수백 개의 뉴런으로 구성된 10개 이상의 층을 수십만 개의 가중치로 연결해 훨씬 더 깊은 심층 신경망을 훈련해야 할 것입니다. 심층 신경망 훈련은 쉽지 않습니다. 훈련 중 다음과 같은 문제를 맞닥뜨릴 수 있습니다. 까다로운 그레이디언트 소실 또는 그레이디언트 폭주 문제에 직면할 수 있습니다. (신경망의 아래쪽으로 갈수록 그레이디언트가 점점 더 작아지거나 커지는 현상입니다.) 대규모 신경망을 위한 훈련 데이터가 충분하지 않거나 레이블을 만드는 작업에 비용이 많이 들 수 있습니다. 훈련이 극단적으로 느려질 수 있습니다. 모델이 너무 복잡해 과대적합될 위험이 큽니다. 특히 훈련 샘플이 충분하지 않거나 잡음이 많은 경우에 ..

    [머신 러닝] 신경망 하이퍼파라미터 튜닝하기

    신경망의 유연성은 조정할 하이퍼파라미터가 많기 때문에 단점이기도 합니다. 아주 간단한 것에서 복잡한 것까지 많은 것을 바꿀 수 있습니다. 하이퍼파라미터를 튜닝하는 한 가지 방법은 여러 조합을 시도해보고 어떤 것이 가장 좋은 점수를 내는지 확인하는 것입니다. 예를 들어 GridSearchCV나 RandomizedSearchCV를 사용해 하이퍼파라미터 공간을 탐색할 수 있습니다. 아래 코드를 참고하세요. HTML 삽입 미리보기할 수 없는 소스

    [머신 러닝] 텐서보드를 이용해 시각화하기

    텐서보드를 이용해 시각화하기 텐서보드를 이용해 훈련하는 동안 학습 곡선을 그리거나 여러 실행 간의 학습 곡선을 비교하고 계산 그래프 시각화와 훈련 통계 분석을 수행할 수 있습니다. 또한 모델이 생성한 이미지를 확인하거나 3D에 투영된 복잡한 다차원 데이터를 시각화하고 자동으로 클러스터링을 해주는 등 많은 기능을 제공합니다. 텐서보드를 이용하려면 프로그램을 수정하여 이벤트 파일이라는 이진 로그 파일에 시각화하려는 데이터를 출력해야합니다. 각각의 이진 데이터 레코드를 서머리라고 합니다. 텐서보드 서버는 로그 디렉터리를 모니터링하고 자동으로 변경사항을 읽어 그래프를 업데이트합니다. 훈련하는 중간에 학습 곡선같이 실시간 데이터를 시각화할 수 있습니다. 일반적으로 텐서보드 서버가 루트 로그 디렉터리를 가리키고 프..

    [머신 러닝] 콜백 사용하기

    콜백 사용하기 훈련이 몇 시간동안 지속되는 경우에는 훈련 마지막에 모델을 저장하는 것 뿐만 아니라 훈련 도중 일정 간격으로 체크포인트를 저장할 필요가 있습니다. fit() 메소드의 callbacks 매개변수를 사용해서 케라스가 훈련의 시작이나 끝에 호출할 객체 리스트를 지정할 수 있습니다. 또는 에포크의 시작이나 끝, 각 배치 처리 전후에 호출할 수도 있습니다. 예를 들어 ModelCheckPoint는 훈련하는 동안 일정한 간격으로 모델의 체크포인트를 저장합니다. 기본적으로는 매 에포크의 끝에서 호출됩니다. [...] # 모델을 만들고 컴파일하기 checkpoint_cb = keras.callbacks.ModelCheckPoint('filename.h5') history = model.fit(X_trai..