선언형 코드(Declarative Programming)

선언형 코드(Declarative Programming)는 프로그래밍에서 어떤 작업을 수행하는 방법보다는 수행하고자 하는 결과에 초점을 맞춘 접근 방식입니다. 이 방식은 ‘무엇을’ 할 것인가에 집중하며, ‘어떻게’ 할 것인가는 시스템이 결정하도록 합니다.

선언형 프로그래밍의 특징은 다음과 같습니다:

  1. 추상화의 수준이 높음: 선언형 코드는 복잡한 로직이나 상태 관리를 숨기고, 더 높은 수준의 추상화를 제공합니다. 프로그래머는 세부적인 구현보다는 전체적인 목표나 명세에 집중할 수 있습니다.
  2. 코드 간결성: 선언형 프로그래밍은 일반적으로 더 간결하고 읽기 쉬운 코드를 작성하는 데 도움이 됩니다. 이는 코드의 의도를 더 명확하게 전달하고 유지 보수를 용이하게 합니다.
  3. 코드 재사용성 및 모듈성 향상: 선언형 코드는 재사용 가능한 구성 요소로 작성되기 쉽습니다. 이러한 구성 요소는 다른 컨텍스트에서도 쉽게 사용될 수 있으며, 모듈성을 향상시킵니다.
  4. 부작용 감소: 선언형 프로그래밍은 부작용(side effects)을 최소화하는 경향이 있습니다. 이는 프로그램의 예측 가능성과 신뢰성을 높이는 데 도움이 됩니다.

HTML과 SQL은 선언형 프로그래밍의 좋은 예시입니다. 예를 들어, HTML에서는 웹 페이지의 구조를 선언하지만, 이를 어떻게 렌더링할지는 브라우저가 결정합니다. SQL에서는 데이터를 어떻게 조회하고 조작할지를 선언하지만, 실제 데이터베이스가 그 쿼리를 어떻게 처리할지는 숨겨져 있습니다.

React.js 역시 선언형 프로그래밍의 접근을 사용합니다. React에서는 UI의 상태를 선언하고, 그 상태가 변경될 때 UI가 어떻게 업데이트되어야 하는지 React 엔진이 결정합니다. 이는 개발자가 UI의 세부적인 동작보다는 UI의 전체적인 구조와 동작에 더 집중할 수 있게 해줍니다.

선언형 프로그래밍을 이해하기 쉽게 만드는 좋은 방법은, 선언형과 명령형(절차적) 프로그래밍의 차이를 예시를 통해 설명하는 것입니다. 각각의 스타일은 ‘무엇을’ 하고 싶은지(선언형)와 ‘어떻게’ 해야 하는지(명령형)에 초점을 맞춥니다.

명령형 프로그래밍 예시:

문제: 리스트에서 모든 짝수를 찾아 그 합을 계산합니다.

명령형 접근:

  1. 빈 합계 변수를 생성합니다.
  2. 리스트를 순회합니다.
  3. 각 요소가 짝수인지 확인합니다.
  4. 짝수라면 합계에 더합니다.
  5. 최종 합계를 반환합니다.
numbers = [1, 2, 3, 4, 5, 6]
sum_even = 0
for num in numbers:
    if num % 2 == 0:
        sum_even += num
print(sum_even)  # 결과: 12

이 접근 방식에서는 ‘어떻게’ 계산을 해야 하는지 단계별로 설명합니다.

선언형 프로그래밍 예시:

선언형 접근:

  1. 짝수만 필터링합니다.
  2. 필터링된 숫자의 합을 계산합니다.
numbers = [1, 2, 3, 4, 5, 6]
sum_even = sum(num for num in numbers if num % 2 == 0)
print(sum_even)  # 결과: 12

이 접근 방식에서는 ‘무엇을’ 할 것인지를 선언합니다. 즉, “짝수를 찾아 그 합을 구한다”고 선언하며, 구체적인 ‘어떻게’에 대해서는 걱정하지 않습니다.

HTML의 예시:

HTML은 웹 페이지의 구조를 선언적으로 정의합니다. 예를 들어:

<!DOCTYPE html>
<html>
<head>
    <title>My Page</title>
</head>
<body>
    <h1>Welcome to My Page</h1>
    <p>This is a paragraph.</p>
</body>
</html>

여기서는 웹 페이지의 구조를 선언합니다: 제목이 있고, 그 아래에 단락이 있습니다. 이를 어떻게 브라우저에 표시할지는 선언하지 않습니다. 그 결정은 브라우저의 렌더링 엔진이 담당합니다.

React의 예시:

React에서는 UI를 선언적으로 구성합니다:

function WelcomeMessage() {
    return <h1>Welcome to My Page</h1>;
}

ReactDOM.render(<WelcomeMessage />, document.getElementById('root'));

이 코드는 “Welcome to My Page”라는 제목이 있는 컴포넌트를 선언합니다. 이 컴포넌트가 어떻게 렌더링되고, 화면에 어떻게 표시될지에 대해서는 걱정하지 않습니다. 그 작업은 React 라이브러리에 의해 처리됩니다.

이러한 예시들은 선언형 프로그래밍이 ‘무엇을’ 할 것인지에 집중하고, ‘어떻게’ 해야 하는지는 프로그래밍 언어나 프레임워크에 위임한다는 개념을 잘 보여줍니다.

좋은 아이디어는 멍때리기에서 나온다? DMN 탐구

미국 뇌과학자 마커스 라이클 박사의 연구에 따르면, 사람이 아무런 인지 활동을 하지 않을 때 활성화되는 뇌의 특정 부위가 있는데, 이를 ‘디폴트 모드 네트워크'(DMN)라고 합니다.

DMN은 휴식을 취할 때 활성화되며, 몽상을 즐길 때나 잠을 자는 동안에 활발한 활동을 합니다. DMN의 발견은 뇌가 아무것도 하지 않을 때도 몸 전체 산소 소비량의 20%를 차지하는 이유를 설명합니다.

또한, DMN이 활성화되면 창의성이 생겨나고 특정 수행 능력이 향상되는 것으로 나타났습니다. 예를 들어, 일본 도호쿠 대학 연구팀은 아무런 생각을 하지 않을 때 뇌 혈류 상태를 측정했고, 그 결과 백색질의 활동 증가와 혈류의 흐름이 활발해진 실험 참가자들이 새로운 아이디어를 신속하게 내는 데 높은 점수를 받았습니다

디폴트 모드 네트워크(Default Mode Network, DMN)는 뇌과학 분야에서 중요한 개념입니다. 이 네트워크는 뇌의 여러 부분이 서로 연결되어 있으며, 특히 주의가 외부 자극에서 벗어나 내부 사고나 기억에 집중될 때 활성화되는 것으로 알려져 있습니다.

DMN의 구성

  • 주요 영역: DMN은 뇌의 여러 영역을 포함하며, 특히 전전두엽 피질, 측두엽, 후두엽 상부, 그리고 후엽부(특히 시상하부와 연결된 부분)를 포함합니다.
  • 연결성: 이 네트워크는 이러한 뇌 영역들 간의 강한 기능적 연결성을 특징으로 합니다.

DMN의 기능

  • 내부적 사고: DMN은 자아 관련 사고, 과거의 추억 회상, 미래에 대한 상상, 그리고 다른 사람들의 관점을 이해하는 데 중요한 역할을 합니다.
  • 정신적 휴식: DMN은 외부 환경에 대한 주의력이 감소했을 때 활성화되며, 이는 정신적 휴식이나 명상과 같은 상태와 관련이 있습니다.
  • 자기 성찰: 자기 생각과 감정에 대한 성찰, 자아성찰의 과정에 중요합니다.

DMN과 질병

  • 정신 질환: 우울증, 불안 장애, 조현병과 같은 정신 질환에서 DMN의 활성화 패턴이 변화하는 것이 관찰되었습니다.
  • 신경퇴행성 질환: 알츠하이머병과 같은 신경퇴행성 질환에서도 DMN의 연결성 및 활성화에 변화가 나타납니다.

연구 및 응용

  • 뇌 이미징 연구: 기능적 자기 공명 영상(fMRI)을 통해 DMN의 활동을 연구하고 있으며, 이를 통해 다양한 신경정신 질환의 메커니즘을 이해하는 데 기여하고 있습니다.
  • 치료적 접근: DMN의 활동을 조절하는 것이 명상, 인지 행동 치료 등의 효과를 설명할 수 있으며, 이를 바탕으로 새로운 치료 방법을 모색하는 데 도움이 됩니다.

요약

DMN은 뇌의 여러 부분이 연결되어 있으며, 내부 사고, 자기 성찰, 그리고 정신적 휴식과 관련이 있는 중요한 뇌 네트워크입니다. 이 네트워크는 다양한 정신 질환의 이해와 치료에 중요한 역할을 하고 있습니다.


디폴트 모드 네트워크(DMN)는 인간 두뇌의 기본 구성 요소로, 고유한 역할과 특성으로 인해 신경과학 연구에서 큰 주목을 받고 있습니다.

인지 과정에서의 DMN의 역할: DMN은 특히 외부 작업에 집중하지 않고 공상, 과거 또는 미래 관조, 다른 사람의 관점 고려와 같은 내성적인 활동에 참여할 때 활성화됩니다. 이 네트워크는 깨어 있는 상태에서도 활성화되지만, 정신이 힘든 작업에 몰두하지 않는 휴식 상태에서는 더욱 활발하게 활동합니다.

정보와 감각의 통합: DMN은 공상, 회상, 미래 계획과 같은 내부 지향적 인지 과정에 특화된 ‘내재적’ 시스템으로 간주됩니다. 이 시스템은 들어오는 외재적 정보를 이전의 내재적 정보와 통합하여 상황에 따른 풍부한 상황 모델을 형성하고 공유 커뮤니케이션, 내러티브 및 소셜 네트워크에 기여하는 역동적인 역할을 합니다.

정신 질환에 대한 관여: DMN의 조절 장애는 다양한 형태의 정신 질환과 연관되어 있습니다. 예를 들어, DMN 내 연결성 문제는 우울증 환자의 높은 수준의 반추와 관련이 있습니다. 또한, DMN은 알츠하이머병이나 파킨슨병과 같은 질환에서 중요한 에피소드 기억 처리에 관여하여 기억 처리에 영향을 미칩니다.

창의력 향상에 기여: DMN은 다른 뇌 네트워크와 함께 창의력을 키우는 데 중요한 역할을 하는 것으로 알려져 있습니다. 사람의 머릿속이 공회전하는 동안 DMN의 활동은 아이디어를 생성하는 데 도움이 될 수 있으며, 이 아이디어는 다른 네트워크에 의해 추가로 처리될 수 있습니다.

수면 중 활동: DMN은 수면 중에도 활동하며, 정신적 이미지 및 꿈과 관련이 있습니다. 공상과 몽상은 비슷한 뇌 메커니즘을 사용하는 것으로 추정되며, 몽상은 공상이나 정신적 방황의 더 강렬한 형태라고 할 수 있습니다.

구조적 측면: 신경학자 마커스 라이클이 발견한 DMN은 전두엽, 두정엽, 측두엽 피질의 일부를 포함한 여러 뇌 영역에 걸쳐 있습니다. 이러한 영역은 특정 정신 기능과 관련하여 공동 활성화 또는 비활성화를 나타내며, 이는 DMN의 복잡성과 전두엽 네트워크 및 실행 제어 네트워크와 같은 다른 뇌 네트워크와의 통합을 강조합니다.

시간에 따른 이해의 진화: 지난 20년 동안 DMN의 기능에 대한 이해는 크게 발전해 왔습니다. 이제 DMN은 자기 참조, 사회적 인지, 에피소드 및 자서전적 기억, 언어, 의미 기억, 정신적 방황에서 그 역할이 인정받고 있습니다. DMN은 기억, 언어, 의미적 표현을 통합하고 방송하여 자아와 의식의 구성에 중심이 되는 ‘[[내적 내러티브]]’를 생성합니다.

이처럼 광범위한 인지 및 감정 과정에 관여하는 DMN은 인간 정신의 전반적인 기능과 안녕에 있어 그 중요성을 강조합니다. DMN은 내부 및 외부 정보를 통합하고 처리하는 데 중요한 네트워크 역할을 하며, 우리 자신을 인식하고 다른 사람과 상호 작용하며 창의적이고 반성적인 사고 과정에 참여하는 방식에 영향을 미칩니다.

OpenAI Whisper 새로운 버전 large-v3


OpenAI의 Whisper가 새로운 버전인 large-v3로 업데이트되었습니다. 이번 업데이트에서 주목할 점은 다음과 같습니다:

  1. 입력 오디오 처리: 새로운 모델은 128개의 Mel 주파수 빈을 사용하여 오디오를 처리합니다. 이는 이전 모델의 80개에 비해 증가한 수치입니다.
  2. 언어 지원 추가: Cantonese(광둥어) 언어 토큰이 새롭게 추가되었습니다.
  3. 학습 데이터: large-v3 모델은 large-v2를 사용해 수집한 1백만 시간의 약하게 레이블링된 오디오와 4백만 시간의 의사 레이블링된 오디오로 학습되었습니다.
  4. 성능 향상: large-v3는 다양한 언어에 대한 성능이 향상되었으며, 특히 오류율이 60% 미만인 모든 언어에서 large-v2에 비해 오류율이 10%에서 20% 감소한 것으로 나타났습니다.
  5. 캐릭터 오류율 사용: 일부 언어(한국어, 중국어, 일본어, 태국어, 라오스어, 미얀마어)는 문자 기반 오류율(CER)을 사용하여 평가했습니다.
  6. 사용 방법: large-v3 모델은 openai-whisper==20231106 버전 이후로 사용 가능하며, pip install -U openai-whisper 명령어를 통해 패키지를 업데이트한 후 "large-v3" 이름으로 모델을 로드할 수 있습니다

https://github.com/openai/whisper/discussions/1762