sueleesoossoo's devlog


  • Home

  • Categories

  • About

  • Archives

  • Tags

[ML] Generalization

Posted on 2018-10-06 | 0 comments

Generalization : peril-of-overfitting

일반화 : 과적합의 위험

적합한 모델을 찾게 되어도 그 후에 새 데이터를 추가할 때 이 모델은 주로 새 데이터에 적합하지 않은 것으로 확인이 된다. 이 모델은 학습한 데이터의 특성에 과적합한다.

과적합 모델은 학습하는 동안 손실이 적지만 새 데이터를 잘 예측하지 못한다. 현재 샘플(데이터)에 적합한 모델을 만들게 되면 이는 필요 이상으로 복잡한 모델이 될 가능성이 높아서 이는 과적합이 발생하게 된다.

머신러닝의 근본적인 과제는 데이터 적합도를 유지하는 동시에 최대한 단순화하는 것이다.

  • 모델의 복잡성
  • 학습 데이터에 대한 모델의 성능

이와 같은 요인을 기반으로 새 데이터에 맞게 모델이 일반화되는 정도를 통계적으로 설명하는 일반화 한계를 정의하게 된다.

즉, 머신러닝의 목표는 숨겨진 실제 확률 분포에서 추출되는 새 데이터를 잘 예측하는 것이다. 하지만 데이터 세트에서 모델을 만드는 경우 어떻게 이전에 보지 못한 데이터를 얻을 수 있을까?

  • 학습 세트 : 모델을 학습시키기 위한 하위 세트
  • 테스트 세트 : 모델을 테스트하기 위한 하위 세트

그에 대한 해결 방법으로 데이터 세트를 두 세트로 나누는 것이다.

  • 테스트 세트가 충분히 크다.
  • 같은 테스트 세트를 반복사용하지 않는다.

위와 같은 경우가 테스트 세트가 성능이 좋으며, 새 데이터에서도 성능이 좋다고 할 수 있다.

일반화에서는 기본적으로 3가지 사항을 가정한다.

  1. 분포에서 독립적이고 동일하게(i.i.d.) 임의로 예를 추출한다. 즉, 예시가 서로 영향을 미치지 않는다.
  2. 분포가 정상성을 보인다. 즉, 데이터 세트 내에서 분포가 달라지지 않는다.
  3. 같은 분포를 따르는 부분에서 예를 추출한다.
Read more »

[ML] First Steps about Tensorflow

Posted on 2018-10-06 | 0 comments

참고 : https://developers.google.com/machine-learning/crash-course/first-steps-with-tensorflow/toolkit

텐서플로우 첫걸음 : 도구

텐서플로우 도구함 현재 계층 구조

  • 1층 : CPU, GPU, TPU 커널은 하나 이상의 플랫폼에서 작동
  • 2층 : Tensorflow C++
  • 3층 : Tensorflow Python C++ 커널을 래핑하는 오퍼레이션 제공
  • 4층 : tf.layers, tf.losses, tf.metrics 일반 모델 구성요소용 재사용 가능 라이브러리
  • 5층 : Tensorflow Estimators 높은 수준의 개체 지향 API

텐서플로우 도구함 계층구조

  • 텐서플로우 : 낮은 수준의 API
  • tf.layers/tf.losses/tf.metrics : 일반 모델 구성요소용 라이브러리
  • 에스티메이터(tf.estimator) : 높은 수준의 OOP API

텐서플로우 구성 요소

  • 그래프 프로토콜 버퍼
  • 분산된 그래프를 실행하는 런타임

이 구성요소는 자바 컴파일러 및 JVM과 유사하다. JVM이 여러 하드웨어 플랫폼에서 구현되는 것과 마찬가지로 텐서플로우도 여러 CPU, GPU에서 구현된다.

어느 API를 사용해야 하는가?
높은 수준의 추상화를 사용해야한다. 추상화 수준이 높을수록 더 사용하기 쉽지만, 유연성이 떨어진다. 그래서 먼저 최고 수준의 API로 시작하여 모든 작업을 실행하는 것이 좋다.
특별한 모델링 문제를 해결하기 위해 더 유연한 추상화가 필요하면, 한 수준 아래로 이동한다. 각 수준은 낮은 수준의 API를 사용하여 제작되므로 계층구조를 낮추는 것이 합리적이다.

tf.estimator API

tf.estimator은 많은 실습에서 사용된다. 낮은 수준의 텐서플로우를 사용해도 실습의 모든 작업을 실행할 수 있지만, tf.estimator를 사용하면 코드 행 수가 크게 줄어들게 된다.

tf.estimator는 scikit-learn API와 호환된다. scikit-learn은 Python의 매우 인기 있는 오픈소스 ML 라이브러리로, 100,000명이 넘는 사람들이 이용하고 있다.

tf.estimator로 구현된 선형 회귀 프로그램의 형식은 대체로 다음과 같다.

import tensorflow as tf

# Set up a linear classifier
classifier = tf.estimator.LinearClassifier()

# Train the model on some example data
classifier.train(input_fn=train_input_fn, steps=2000)

# Use it to predict
predictions = classifier.predict(input_fn=predict_input_fn)
Read more »

[DB] Connection pool

Posted on 2018-10-06 | 0 comments

Connection Pool이란 데이터베이스와 애플리케이션을 효율적으로 연결하는 라이브러리로 웹 애플리케이션에서 필수적이다.
웹 애플리케이션 서버로 상용 제품을 사용하면 보통 제조사에서 제공하는 커넥션 풀 구현체를 사용한다. 그 외에는 오픈소스 라이브러리로 Apache Commons DBCP와 Tomcat-JDBC, BoneCP, HikariCP 등이 있다. 주로 많이 쓰이는 것은 HikariCP라고 한다.

커넥션 풀 라이브러리를 잘 사용하면 데이터베이스와 애플리케이션의 일부분에서 발생하는 문제가 전체로 전파되지 않게 할 수 있고, 일시적인 문제가 긴 시간 이어지지 않게 할 수 있다. 반대로 값을 적절히 설정하지 않아 커넥션 풀이 애플리케이션에서 병목 지점이 되는 경우도 있다.
웹 애플리케이션의 요청은 대부분 DBMS로 연결되기 때문에 커넥션 풀 라이브러리 설정은 전체 애플리케이션의 성능과 안정성에 영향을 미치는 핵심이다.

Read more »

TIL: [Spring] @ComponentScan & @Import

Posted on 2018-10-05 | 0 comments

ComponentScan

Read more »

TIL: [Spring] Springboot Start Project 시 유의할 점

Posted on 2018-10-04 | 0 comments

Spring Project를 만들 때

Read more »

TIL: [Spring] Stereotype-annotation

Posted on 2018-10-03 | 0 comments

Stereotype-annotation

Read more »

TIL: [Spring] 의존성 자동 주입 @autowired

Posted on 2018-09-23 | 0 comments

DI란?

DI란, Dependency Injection의 앞글자만 따온 글자로서 의존성 주입이라는 단어로 Spring에서 쓰인다.

DI를 하려면, 직접 의존성을 주입할 대상 Bean을 지정해주거나, Spring이 알맞은 의존 객체를 찾아 주입해주는 의존성 자동 주입 방법이 있다.

  1. 의존성 주입 대상에 @autowired 어노테이션을 사용한다.
  2. XML 설정에 <context:annotation-config />설정을 추가한다.

    @autowired 어노테이션

    org.springframework.beans.factory.annotation

의존관계를 자동설정할 때 사용, 타입을 이용하여 의존하는 객체를 삽입해준다. 해당 타입의 빈객체가 존재하지 않거나, 2개 이상 존재할 경우 스프링은 예외를 발생시킨다.

@Autowired를 적용할 때 같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는데, 이럴 때 @Qualifier를 사용하면 동일한 타입의 Bean 중 특정 Bean을 사용하도록 하여 문제를 해결할 수 있다.

Read more »

TIL: Ajax란?

Posted on 2018-09-23 | 0 comments

Ajax

Asynchronous Javascript Xml을 말한다.
Javascript의 비동기통신(XmlHttpRequest)을 사용해 웹 브라우저의 페이지를 전환하지 않은 채 일부를 수정함으로써 편의성을 높여주는 기술이다.

대표적인 사용법으로는 구글맵의 지도를 움직이거나 지도에서 가게 정보를 표시하는 것을 예로 들 수 있다.

Read more »

TIL: [Maven] Maven Wrapper이란?

Posted on 2018-09-22 | 0 comments

참고

  • https://www.popit.kr/how-to-use-maven-wrapper/
  • http://maven.apache.org/

Maven이란?

Maven은 Java 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이다. 이전에는 Ant가 사용되었스며, 최근에는 Gradle이 사용되고 있는 추세이다. 이는 Apache License로 배포되는 오픈 소스 소프트웨어이다.

Maven Lifecycle

Maven Lifecycle이란 Maven에서 미리 정의하고 있는 빌드 순서를 의미한다. 그리고 라이프 사이클의 각 빌드 단계를 Phase라고 한다. 또한 이런 각 Phase들은 의존관계를 가지고 있다.

plugins

Maven은 plugins을 구동해주는 프레임워크이다. 모든 작업은 플러그인에서 수행한다. 플러그인은 저장소에서 관리된다.
Maven은 여러 plugins로 구성되어 있으며, 각각의 플러그인은 하나 이상의 goal(명령, 작업)을 포함하고 있다. Goal은 Maven의 실행단위이다.

Maven Wrapper

mvnw라고도 불리는 Maven Wrapper는 Apache Maven을 프로젝트에서 요구하는 버전으로 유지하기 위해 사용하는 도구이다. 복잡해지는 빌드 환경을 Maven Wrapper를 이용해 해결할 수 있다.

Read more »

[OS] 운영체제란?

Posted on 2018-09-10 | 0 comments

참고 : http://copycode.tistory.com/39?category=740133

운영체제 (Operation System)

컴퓨터의 대부분을 관리하는 역할을 한다. 운영체제는 컴퓨터 하드웨어를 잘 관리하여 성능을 높이고 사용자에게 편의성을 제공하는 프로그램이다.

컴퓨터를 구성하고 있는 기본적인 요소는 CPU, 메인 메모리, 하드디스크이다.
CPU는 컴퓨터에서 연산을 담당하고, 메인 메모리는 컴퓨터에서 작동하고 있는 프로그램인 프로세서들을 저장, 관리한다. 컴퓨터를 키기 전에는 운영체제는 하드디스크에 존재하지만, 컴퓨터를 켰을 때, 하드디스크에 있는 운영체제가 메인 메모리로 올라가게 된다.
이러한 동작을 하는 곳은 메인 메모리이다. 메인 메모리는 원래 RAM인 휘발성 메모리로 컴퓨터가 꺼지면 자료를 모두 날려버린다. 컴퓨터를 킬 때 운영체제를 올리는 프로그램까지 날려버리면 운영체제는 하드디스크로 올라올 수 없게 되므로, 메인 메모리에 작은 부분은 부팅을 위한 ROM인 비휘발성인 부분으로 지정되어 있다. 그러면 운영체제가 컴퓨터를 제어하기 시작한다.
운영체제는 시스템 콜과 인터럽트에 의해서 움직인다.
시스템 콜이란, 컴퓨터가 필요한 작업을 수행하기 위해 운영체제에 어떤 일을 요구하는 요청이다.
인터럽트는 하드웨어 인터럽트와 소프트웨어 인터럽트로 나누어진다. 인터럽트가 실행되면 운영체제 내의 코드가 실행되고 Interrupt Service Routine을 하게 된 후 다시 대기하는 상태가 된다.

Read more »
1 … 31 32 33 … 35
LEESOO

LEESOO

Junior Frontend Developer

341 posts
12 categories
34 tags
RSS
GitHub
© 2024 LEESOO
Powered by Jekyll
Theme - NexT.Muse