How understand AI Behavior tree system?

Hello!
Recently I got UE 4. I need to understand Behavior tree system on code level but I cant learn all specific of UE 4. Please, help me! What is blackboard in AI? How work UBehaviorTree? What is UBTDecorator?

There is an introduction here.
Also, your timing is good. There is a live stream dedicated to behavior trees starting in a few hours. See here.

The intro is not code level. I will see the Stream about Behavior Tree.

There is a forum thread on Behavior Trees. Don’t read the first post extensively, though - it has little to do with BT.
Behavior Tree Tutorial
Also, there are some helpful pieces of code from Lucasz here.
That being said, the introduction to behavior trees does a good job explaining the general logic and terms (like Decorator) behind them. Once you have your tasks implemented in code, you can easily combine them in behavior tree editor. In a nutshell, a behavior tree (BT) is a logic sequence of tasks. Blackboard is a collection of variables which is shared between BT nodes. Here is a simple task to get you started with blackboard variables.

//.h
UCLASS()
class UBTTask_WanderAround : public UBTTask_BlackboardBase
{	GENERATED_BODY()
public:
	virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent* OwnerComp, uint8* NodeMemory) override;
};

//.cpp
EBTNodeResult::Type UBTTask_WanderAround::ExecuteTask(class UBehaviorTreeComponent* OwnerComp, uint8* NodeMemory)
{ 
	UNavigationSystem* NavSys = UNavigationSystem::GetCurrent(OwnerComp);
	AAIController* MyAI = Cast<AAIController>(OwnerComp->GetOwner());
	if (NavSys && MyAI && MyAI->GetPawn())
	{
		const float SearchRadius = 1000.0f;
		FNavLocation RandomPt;
		const bool bFound = NavSys->GetRandomPointInRadius(MyAI->GetPawn()->GetActorLocation(), SearchRadius, RandomPt);
		if (bFound)
		{
			//Set a blackboard variable bound to this task by a key
			OwnerComp->GetBlackboardComponent()->SetValueAsVector(GetSelectedBlackboardKey(), RandomPt.Location);
			return EBTNodeResult::Succeeded;
		}
	}

	return EBTNodeResult::Failed; //there are plenty of other useful results; see declaration
}